是换行符“\ n”2个字符或1个字符

时间:2013-03-24 17:41:52

标签: python io

所以我有一个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”?

2 个答案:

答案 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']

请注意,这只会删除行尾的空格。