8

所以我有一个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”的处理方式不同吗?

4

2 回答 2

10

Python默认以文本模式打开文件。以文本模式打开的文件会自动转换为平台原生换行符约定\n

\r\n您很可能在 Windows 上使用换行约定打开了一个文件。

如果您不希望发生这种翻译,请以二进制模式打开文件。有关详细信息,请参阅该open()函数的文档:

默认是使用文本模式,它可以'\n'在写入和读取时将字符转换为特定于平台的表示。因此,在打开二进制文件时,应附加'b'到模式值以二进制模式打开文件,这将提高可移植性。

于 2013-03-24T17:44:16.127 回答
0

您不必自己处理这个问题。Python 随附电池。:-)

如果换行符困扰您,请仅read()使用整个文件并使用splitlines()字符串方法;

In [21]: test = 'foo \nbar bla\n baz\r\n'

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

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

于 2013-03-24T17:54:47.967 回答