Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,按原样读取CRLF文本文件,使用CRLF_Python_Python 2.7_File Io_Line Endings - Fatal编程技术网

Python,按原样读取CRLF文本文件,使用CRLF

Python,按原样读取CRLF文本文件,使用CRLF,python,python-2.7,file-io,line-endings,Python,Python 2.7,File Io,Line Endings,这将读取带有LF行结尾的CR LF文本文件(WinXP,Py 2.6)。因此,行包含'\n'结尾。如何按原样获取线路: 对于CRLF文件,获取以“\n\r”结尾的行 对于LF文件,获取以“\n”结尾的行 使用,而不是内置的open()函数。这使您能够更好地控制如何使用newline参数处理换行: with open(fn, 'rt') as f: lines = f.readlines() 将换行符设置为空字符串,将启用通用换行符支持,但返回未翻译的行结尾;您仍然可以使用.readl

这将读取带有LF行结尾的CR LF文本文件(WinXP,Py 2.6)。因此,
包含'\n'结尾。如何按原样获取线路:

  • 对于CRLF文件,获取以“\n\r”结尾的行
  • 对于LF文件,获取以“\n”结尾的行

使用,而不是内置的
open()
函数。这使您能够更好地控制如何使用
newline
参数处理换行:

with open(fn, 'rt') as f:
    lines = f.readlines()
换行符
设置为空字符串,将启用通用换行符支持,但返回未翻译的行结尾;您仍然可以使用
.readlines()
查找以任何合法行终止符终止的行,但返回的数据与文件中的数据完全相同:

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

我的

这与以二进制模式打开文件不同,在二进制模式下,
.readlines()
将仅拆分
\n
个字符的文件。对于具有
\r
行结尾或混合行结尾的文件,这意味着无法正确拆分行

演示:


请注意,
io.open()
还将文件内容解码为unicode值。

这太棒了!但是看看3.5文档,我发现内置的open()对
newline
参数具有相同的支持。也许这在过去的某个时候发生了变化?我现在才看到OP要求一个2.x解决方案。@cxxl:这个问题特定于Python 2.x,是的,其中内置的
open
不是同一个函数。在Python3.x中,
io.open
open
是完全相同的函数。
import io

with io.open(fn, 'rt', newline='') as f:
    lines = f.readlines()
>>> import io
>>> open('test.txt', 'wb').write('One\nTwo\rThree\r\n')
>>> open('test.txt', 'rb').readlines()
['One\n', 'Two\rThree\r\n']
>>> io.open('test.txt', 'r', newline='').readlines()
[u'One\n', u'Two\r', u'Three\r\n']