问题:
在 Python 3 中,我使用 csv.DictWriter 向现有文件追加一行。但是,正在使用 CRLF 行结尾而不是预期的 LF 行结尾。
代码示例:
#!/usr/bin/env python3
import csv
with open("test.csv", 'a', newline='') as test_f:
test_csv = csv.DictWriter(test_f, delimiter='|', fieldnames=['1', '2'])
test_csv.writerow({'1': "test1", '2': "test2"})
预期结果:
$ cat -e test.csv
test1|test2$
实际结果:
$ cat -e test.csv
test1|test2^M$
注意事项:
- 现有文件的文件格式是“unix”,而不是“dos”。
- 我试过设置newline为 None(默认值)和 '\n'(即使这应该是不必要的,因为默认值是 os.linedep,在 Linux 上已经是 '\n'),但结果是一样的。
最佳答案
通过指定 lineterminator
, 你可以控制它。
test_csv = csv.DictWriter(
test_f,
delimiter='|',
lineterminator='\n', # <--------
fieldnames=['1', '2'])
关于Python3 DictWriter 在 Linux 上使用 CRLF 而不是 LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25591756/