【问题标题】:What does the argument newline='' do in the open function?参数 newline='' 在 open 函数中有什么作用?
【发布时间】:2021-12-16 11:41:54
【问题描述】:

我是 StackOverflow 的新手,如果这是一个重复/愚蠢的问题,我很抱歉!

我在 Codecademy 中学习 python,他们正在讨论对 CSV 文件使用 open 函数。我无法真正理解 newline='' 的参数对代码的含义。

import csv

with open('addresses.csv', newline='') as addresses_csv:
  address_reader = csv.DictReader(addresses_csv, delimiter=';')
  for row in address_reader:
    print(row['Address'])

【问题讨论】:

  • 尝试输入pydoc open。或者只是在线read the documentation
  • 您好,欢迎来到 StackOverflow! help 功能确实非常有用。尝试运行help(open)
  • 请重复介绍,尤其是on topic。 Stack Overflow 不能替代进行简单的浏览器搜索和阅读文档。

标签: python


【解决方案1】:

在您的csv.DictReader 函数中,您将遍历addresses.csv 中的行并将每一行映射到dict。检查csv 文件中的引用字段,并查看是否有任何转义序列用于结束行'\r\n' - 请注意当您包含newline 参数时会发生什么,如代码中所示,而不是您不包含时。不包括 newline 参数可能会添加一个您不想要的额外行尾。包含 newline 参数允许 csv 模块自行处理行尾 - 复制 csv 中定义的格式。

【讨论】:

    【解决方案2】:

    在 unix 和 windows 上识别换行符的细微差别('\n' vs '\r\n')

    让我们考虑具有以下内容的文件“text.txt”(在 Windows 中)

    cat text.txt
    welcome
    to
    stackoverflow
    

    windows 中的默认换行符是 '\r\n' 现在,当您读取文件时,Windows 中的默认换行符 '\r\n' 将转换为 '\n'(通用模式)

    >>>with open('text.txt','rt') as f: #Note Console (not using print(f.read())
         f.read()
    #output 
    'welcome\nto\nstackoverflow'
    

    现在换行参数出现在 open() 中 默认情况下,换行符是 None ,因为上面你看到 '\r\n' 转换为 '\n'

    如果你不需要转换为通用模式('\n')而不是使用 newline='' 来打开

    with open('text.txt','rt',newline='') as f:
        f.read()  
    #output 
    'welcome\r\nto\r\nstackoverflow'  (now 'r\n' not '\n')
    

    换行符也只能是 None 或 ''

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2020-08-24
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多