换行符 "\n" 是1个字符还是2个字符?
我有一个文件叫做 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'
,这样可以以二进制模式打开文件,这样更具可移植性。