CSV 编写器将第一行添加到最后一个单元格
CSV writer adds the first line to the last cell
我正在尝试写入一个用另一个程序(excel 和其他程序)保存的 csv 文件。
但是当我打开文件写入时,写入的第一行被添加到最后一行的最后一个单元格。
file.csv
['1','2','3']
['1','2','3']
import csv
fields=['A','B','C']
with open('file.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)
预期结果:
['1','2','3']
['1','2','3']
['A','B','C']
实际结果:
['1','2','3']
['1','2','3A','B','C']
如果我只是写入文件然后在不查看它的情况下再次写入它,这没有问题,但是如果我打开文件并将其保存在程序中,则写入的下一行将添加到上一行而不是成为它是自己的线。
我假设程序保存文件的方式存在格式问题,但我不知道如何修复它。
CSV 文件中的行应始终以“\r\n”序列结束,即使它是文件中的最后一行。在 CSV 编程的伟大传统中,这一点常常被忽略。修复方法是编写一个程序来查看文件并在使用前根据需要修复它。并针对首先编写不合格 CSV 的“其他”程序编写错误。
import csv
def csv_delimiter_fixer(filename):
with open(filename, 'a+b') as fileobj:
fileobj.seek(-1, 2)
if fileobj.read(1) != b"\n":
fileobj.write(b"\r\n")
fields=['A','B','C']
filename = 'file.csv'
csv_delimiter_fixer(filename)
with open('file.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)
我正在尝试写入一个用另一个程序(excel 和其他程序)保存的 csv 文件。 但是当我打开文件写入时,写入的第一行被添加到最后一行的最后一个单元格。
file.csv
['1','2','3']
['1','2','3']
import csv
fields=['A','B','C']
with open('file.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)
预期结果:
['1','2','3']
['1','2','3']
['A','B','C']
实际结果:
['1','2','3']
['1','2','3A','B','C']
如果我只是写入文件然后在不查看它的情况下再次写入它,这没有问题,但是如果我打开文件并将其保存在程序中,则写入的下一行将添加到上一行而不是成为它是自己的线。
我假设程序保存文件的方式存在格式问题,但我不知道如何修复它。
CSV 文件中的行应始终以“\r\n”序列结束,即使它是文件中的最后一行。在 CSV 编程的伟大传统中,这一点常常被忽略。修复方法是编写一个程序来查看文件并在使用前根据需要修复它。并针对首先编写不合格 CSV 的“其他”程序编写错误。
import csv
def csv_delimiter_fixer(filename):
with open(filename, 'a+b') as fileobj:
fileobj.seek(-1, 2)
if fileobj.read(1) != b"\n":
fileobj.write(b"\r\n")
fields=['A','B','C']
filename = 'file.csv'
csv_delimiter_fixer(filename)
with open('file.csv', 'a', newline='') as f:
writer = csv.writer(f)
writer.writerow(fields)