所以我有一个file.txt:
>>012345
>> (new line)
我打电话的时候:
b=a.read(7)
print b
这会给我
012345
(with a newline here)
所以我看到它已经读了接下来的7个字符,将“\ n”算作单个字符。 但是当我使用搜索时,它似乎将“\ n”视为两个字符:
position = a.seek(-2,2)
b=a.read(1)
print b
这会打印一个新的空行,而不是5。
这两种方法是否以不同的方式对待“\n
”?
答案 0 :(得分:10)
默认情况下,Python以文本模式打开文件。以文本模式打开的文件会自动将平台原生换行约定翻译为\n
。
您最有可能在Windows上使用\r\n
换行符约定打开文件。
如果您不希望进行此转换,请以二进制模式打开文件。有关详细信息,请参阅open()
function的文档:
默认设置是使用文本模式,可以在写入时将
'\n'
个字符转换为特定于平台的表示,然后在读取时返回。因此,在打开二进制文件时,您应该将'b'
附加到模式值以在二进制模式下打开文件,这将提高可移植性。
答案 1 :(得分:0)
您不必自己处理此问题。 Python附带电池。 : - )
如果新行打扰你,只需read()
整个文件并使用splitlines()
方法获取字符串;
In [21]: test = 'foo \nbar bla\n baz\r\n'
In [22]: test.splitlines()
Out[22]: ['foo ', 'bar bla', ' baz']
请注意,这只会删除行尾的空格。