在 Windows 系统上用 Python 编写 CSV 文件时,出现意外问题,其中附加了一个回车符字符出现在文件中每行的末尾。这种与预期 rn 行终止的偏差引起了关注,让开发人员想知道根本原因以及这是否是预期行为。
为了深入研究此问题的根源,让我们分析提供的代码片段:
import csv with open('test.csv', 'w') as outfile: writer = csv.writer(outfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) writer.writerow(['hi', 'dude']) writer.writerow(['hi2', 'dude2'])
此代码旨在生成一个名为 test.csv 的 CSV 文件,其中包含两行数据:['hi', 'dude'] 和 ['hi2', '老兄2']。然而,在检查生成的文件时,我们发现每一行都带有一个额外的 r 字符后缀。
为了理解这种行为,我们转向 csv 模块的 Python 文档。根据文档,建议在所有平台上打开带有 newline='' 的文件以禁用通用换行符翻译。
对于 Python 3:
默认,在 Windows 上,csv 模块使用通用换行符转换,在写入文件时将 rn 行终止符转换为 n。为了防止这种翻译并保持原始的 rn 行终止符,需要使用 newline='' 打开文件,如下所示:
with open('output.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) ...
对于 Python 2:
在 Windows for Python 2 上,在将文件传递给任何一个之前,使用“rb”或“wb”以二进制模式打开文件至关重要csv.reader 或 csv.writer。尽管该文件是文本文件,但 CSV 被相关库视为二进制格式,并用 rn 分隔记录。在文本模式下写入此分隔符会提示 Python 运行时将 n 替换为 rn,从而在文件中产生观察到的 rrn 序列。有关这方面的更多详细信息,请参阅之前的答案。
以上是为什么我的 Python CSV 文件在 Windows 上添加额外的回车符?的详细内容。更多信息请关注PHP中文网其他相关文章!