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

如何使用python重写CSV中的行?,python,csv,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

我的代码有点问题-我有一个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的所有小细节

下面是一个未经测试的示例代码,说明您应该做什么

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' )

你能修好压痕吗?根据以下事实,此程序可能有两种截然不同的含义:
with…
是否在
for
循环下。尝试
a.writerow(数据)
?在excel中“打开”文件时,具体如何操作?Excel可能会将其解释为csv,并自动分隔字符。尝试在记事本或文本编辑器中打开它@西斯兰;这不是一个“未验证”的行。打开
f
进行阅读,然后在它仍然打开并用于阅读时再次打开它进行写作,对我来说似乎非常容易出错。我建议尝试编写代码而不这样做。将中间结果保存到某个位置,或使用“wrt”模式打开文件。这似乎是一个简单的文本操作。为什么不显示原始文件的几行内容以及最终文件的内容,我相信您会很快得到正确的解决方案。