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

9 投票
2 回答
5656 浏览
提问于 2025-04-17 20:09

我有一个文件叫做 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 个回答

1

你不需要自己去处理这些问题。Python自带很多好用的功能。:-)

如果换行符让你觉得麻烦,可以用 read() 方法一次性读取整个文件,然后用 splitlines() 方法来处理字符串中的换行;

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

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

需要注意的是,这个方法只会去掉行末的空白字符。

12

在Python中,默认情况下打开文件是以文本模式进行的。以文本模式打开的文件会自动将不同平台的换行符转换为\n

你可能是在Windows上使用\r\n的换行符打开了一个文件。

如果你不想让这个转换发生,可以选择以二进制模式打开文件。想了解更多,可以查看open()函数的文档:

默认情况下使用文本模式,这可能会在写入时将'\n'字符转换为特定平台的表示形式,而在读取时又转换回来。因此,当你要打开一个二进制文件时,应该在模式值后面加上'b',这样可以以二进制模式打开文件,这样更具可移植性。

撰写回答