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)