如何使用python重写CSV中的一行



我的代码有一些问题-我有一个csv文件,我必须将csv中的第一行保存为列表。然后我必须清除文件并使用列表重写行。这是我的代码:

import csv
f = open('PlateBook.csv','r')
reader = f.readlines()
for row in reader:
    outrow = list(row) 
    with open('PlateBook.csv', 'w', newline='') as fp:
        f.truncate
        a = csv.writer(fp, delimiter=',')
        data =  [outrow]
        a.writerows(data)

问题是,当我在Excel中打开csv时,它显然是错误的。每个字符都会填充一个单元格——我希望文件看起来和我写文件时完全一样。

从你描述的问题来看,我想你不想做

outrow = list(row) 

它只是创建一个每个字符的列表,但更像

outrow = row.split(',')

其创建由逗号分隔的字符串的列表。

或者,甚至更好,使用csv.reader,这样它就可以处理引号和csv的所有小细节。

这是一个未经测试的应该做什么的示例代码。

import csv
with open('PlateBook.csv','rt') as input_file:
    reader = csv.reader( input_file )
    with open('PlateBook.temp.csv','wt') as output_file:
        writer = csv.DictWriter( output_file, fieldnames = csvreader.fieldnames )
        writer.writeheader()
        for row in reader:
            writer.writerow( row )
#So far we didnot touch the original file, so if the process
#fails, nothing is left in half-processed state.
import os
os.remove( 'PlateBook.csv' )
os.rename( 'PlateBook.temp.csv', 'PlateBook.csv' )

最新更新