【问题标题】:How to solve the newline problem with code?如何用代码解决换行问题?
【发布时间】:2020-05-14 05:04:47
【问题描述】:

我正在尝试将数据(列表)写入 csv 文件,但它会在每一行之后添加空行。

from csv import  writer

list = [["Name", "Age", "Sex"], ["John", 30, "Male"]]
with open("writer.csv", "w") as csv_file:
    csv_reader = writer(csv_file)
    for i in range(0, len(list)):
        csv_reader.writerow(list[i])

【问题讨论】:

  • 对我来说很好。您确定您发布的代码是您实际运行的代码吗?
  • @JosephSible-ReinstateMonica,如果您使用 Linux、Mac OS 或 Windows,它会失效。由于这三个操作系统使用不同的行尾标记:LF/CR/CRLF
  • @ThunderPheonix 但是除非文本编辑器严重损坏,否则不会导致换行符加倍。
  • @JosephSible-ReinstateMonica 我刚刚编辑了我的答案并提供了更多解释。

标签: python-3.x newline


【解决方案1】:

试试这个:

from csv import  writer

list = [["Name", "Age", "Sex"], ["John", 30, "Male"]]
with open("writer.csv", "w", newline="") as csv_file:
    csv_reader = writer(csv_file)
    for i in range(0, len(list)):
        csv_reader.writerow(list[i])

我刚刚在open函数中添加了newline = ""

根据文档:

将输出写入流时,如果换行符为 None,则为任意 '\n' 写入的字符被翻译为系统默认行 分隔符,os.linesep。如果换行符是'''\n',则不需要翻译 地方。如果换行符是任何其他合法值,则任何 '\n' 写入的字符被转换为给定的字符串。

如果您使用 Windows,os.linesep 等于 '\r\n',因此如果您指定 newline = None(默认情况下),任何 '\n' 都将转换为 '\r\n',这就是为什么您有一个额外的换行符.

【讨论】:

  • 这里有一个不合理的说法:“任何'\n' 都被转换为'\r\n',这就是为什么你有一个额外的[原文如此] 换行符。”将\n 转换为\r\n 是正常的,通常不会导致额外的换行符。
  • @JosephSible-ReinstateMonica 但是如果您有一个文本编辑器将'\r''\n' bith 解释为换行符,您将有空行。
  • 你知道有什么真正的文本编辑器有这个bug吗?
  • @JosephSible-ReinstateMonica 不是真的,只是说!
猜你喜欢
  • 2020-03-10
  • 1970-01-01
  • 2021-03-01
  • 2019-08-29
  • 2021-08-05
  • 2022-11-25
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多