换行符"\n"是2个字符还是1个字符?

9

所以我有一个file.txt文件:

>>012345
>> (new line)

当我调用时:

b=a.read(7)
print b

这将给我

 012345
 (with a newline here)

我看到它读取了接下来的7个字符,将"\n"视为单个字符。 但是当我使用seek时,似乎会将"\n"视为两个字符:

position = a.seek(-2,2)
b=a.read(1)
print b

这会输出一个新的空白行而不是5。

这两种方法是否对 "\n" 有所不同?


2
这取决于平台是Linux、Windows还是MacOSX。 - Basile Starynkevitch
你能澄清一下这个问题是关于打开文件而不仅仅是字符串吗?你的标题会让搜索引擎感到困惑。 - Charlie Parker
2个回答

12

Python默认以文本模式打开文件。以文本模式打开的文件会自动将本地换行符转换为\n

你使用了\r\n的换行约定来打开文件,很可能是在Windows系统上。

如果不希望进行这种转换,请以二进制模式打开文件。有关更多详细信息,请参阅open()函数的说明文档

默认情况下使用文本模式,写入时可能会将'\n'字符转换为特定于平台的表示形式,在读取时又转回去。因此,在打开二进制文件时,应将'b'附加到模式值上,以以二进制模式打开文件,从而提高可移植性。


1
你不必自己处理这个问题。Python自带电池。:-)
如果换行符困扰着你,只需read()整个文件并使用splitlines()方法来处理字符串;
In [21]: test = 'foo \nbar bla\n baz\r\n'

In [22]: test.splitlines()
Out[22]: ['foo ', 'bar bla', ' baz']

请注意,这仅会删除行末的空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接