Python3 DictWriter在Linux上使用CRLF而不是LF

2 投票
1 回答
504 浏览
提问于 2025-04-19 02:03

问题:

在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'),但结果还是一样。

1 个回答

6

通过指定 lineterminator,你可以控制换行符的使用。

test_csv = csv.DictWriter(
    test_f,
    delimiter='|',
    lineterminator='\n',  # <--------
    fieldnames=['1', '2'])

撰写回答