>>> file = open('foo.txt')
>>> file.seek(2)
2
>>> file.read(1)
'\n'
>>> file.tell()
4
为什么目前的位置没有向前移动1个角色? Isn&#t; t '\n'
应该是1个字符?
文件前4行的内容:
1 @
2 @
3 @
@
PS:我在Windows上。
答案 0 :(得分:4)
不要试图解释file.tell()
for a text file的值 - 它只是表示流中位置的一些不透明数字(您可以将其传递给file.seek()
)。
在文本文件中,file.read(1)
读取一个Unicode字符(代码点),而不是字节。根据用于读取文本文件的字符编码,一个Unicode代码点可能是一到四个字节(通常)。
默认为通用换行模式:'\r\n'
,'\r'
,'\n'
全部转换为'\n'
。
要将文件内容视为字节,请以二进制模式打开:'rb'
。在这种情况下,file.tell()
以字节为单位返回位置。
b'\0'
(空字节)表示在Windows上常见的utf-16编码。