python中的行尾

python中的行尾,python,Python,可能重复: 我有点困惑,我想知道这是否是python的东西。我有一个使用Windows行结尾(“\r\n”)的文本文件,但如果我遍历文件中的某些行,将它们存储在列表中,并将列表的字符串表示形式打印到控制台,则会显示“\n”行结尾。我遗漏了什么吗?是的,这是python的东西;默认情况下,open()以文本模式打开文件,其中根据代码运行的平台转换行尾。您将在open()调用中设置newline='',以请求不更改地传递行尾 Python 2的标准open()函数不支持此选项,只有在二进制模式下打

可能重复:


我有点困惑,我想知道这是否是python的东西。我有一个使用Windows行结尾(“\r\n”)的文本文件,但如果我遍历文件中的某些行,将它们存储在列表中,并将列表的字符串表示形式打印到控制台,则会显示“\n”行结尾。我遗漏了什么吗?

是的,这是python的东西;默认情况下,
open()
以文本模式打开文件,其中根据代码运行的平台转换行尾。您将在
open()
调用中设置
newline=''
,以请求不更改地传递行尾

Python 2的标准
open()
函数不支持此选项,只有在二进制模式下打开才会阻止转换,但您可以使用Python 3行为,方法是使用
io.open()

从:

换行符
控制通用换行符模式的工作方式(它仅适用于文本模式)

[……]

  • 从流读取输入时,如果
    换行符
    ,则启用通用换行符模式。输入中的行可以以
    '\n'
    '\r'
    '\r\n'
    结尾,这些行在返回给调用方之前被翻译成
    '\n'
    。如果是
    ,则启用通用换行符模式,但行尾将返回给调用方,而不进行翻译

在Windows上的Py2中,以二进制模式打开文件将避免这种情况。然而,在Py3中(如果您使用的是
io.open
而不是内置),二进制模式与文本模式意味着定义良好且与平台无关的东西,并且不会影响通用换行符。相反,您可以执行以下操作:

file = open(filename, 'r', newline='')

而且换行符不会正常化。

您应该做的是使用通用换行符支持打开文件(适用于Python 2.x)。这是通过“U”或“rU”模式完成的。然后支持任何类型的换行符。python手册中提供了以下文档:

除了标准的fopen()值之外,模式可以是“U”或“rU”。Python通常使用通用换行符支持构建;提供“U”将以文本文件的形式打开文件,但行可能会被以下任何一种方式终止:Unix行尾约定“\n”、Macintosh约定“\r”或Windows约定“\r\n”。Python程序将所有这些外部表示形式都视为“\n”。如果Python是在没有通用换行符支持的情况下构建的,则带有“U”的模式与普通文本模式相同。请注意,这样打开的文件对象还有一个名为“换行符”的属性,该属性的值为“无”(如果尚未看到换行符)、“\n”、“r”、“r\n”,或一个包含所有看到的换行符类型的元组


对于Python3,有一个新行选项可以打开,它控制新行的行为。查看文档,似乎默认支持通用换行符。

可能会帮助您解决问题:换行符结尾有些混乱。Python可能会自动为您处理它们,除非您以二进制(
open(…,'rb')
模式打开文件,具体取决于您的平台。