【问题标题】:Many tutorials on writing csv files have the mode set to 'wb', why?许多关于编写 csv 文件的教程都将模式设置为 'wb',为什么?
【发布时间】:2014-05-23 18:11:16
【问题描述】:

例如:Writing to csv file in Python

with open('StockPrice.csv', 'wb') as f:

为什么我们需要以二进制形式打开 csv 文件?

这只是习惯,还是 csv 文件需要二进制文件的用例?

【问题讨论】:

  • 有时二进制模式会提高 I/O 性能,IIRC。
  • 这是因为documentation for the csv module 说它是必需的。但我一直不明白为什么,这是非常违反直觉的。
  • @frostnational 当然二进制更快,但这似乎不太可能是这里调用它的原因。
  • 在 Windows 上它是绝对必要的。在任何其他平台上它什么都不做(假设您使用的是 Python 2)

标签: python


【解决方案1】:

在 Windows 上使用csv 模块写入输出时,必须使用模式"wb",因为无论您在什么平台上运行,csv 模块都会将行结束写为\r\n

如果你在 Windows 上运行,并且你有一个以 "w" 模式打开的文件,那么 Python 将在你每次编写换行符时添加一个额外的回车符。因此,如果您使用模式为"w" 的文件使用csv 模块写入输出,您将得到\r\r\n 行结尾,因为Python 和csv 模块都添加了回车符。

这是一个演示结果的快速程序。请注意,我们以二进制模式 ("rb") 读取文件,以防止 Python 在读取文件时将 \r\n 替换为 \n

import csv

with open("output.csv", "w") as f:
    w = csv.writer(f)
    w.writerow([1,2,3,4])
    w.writerow([5,6,7,8])

with open("output.csv", "rb") as f:
    print repr(f.read())

当我在 Windows 上运行它时,我得到以下输出:

'1,2,3,4\r\r\n5,6,7,8\r\r\n'

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多