Python 的 tell() 在当前文件位置上行为不同
在书籍《核心Python编程》中,有一个例子 -
>>> f = open('/tmp/x', 'w+') >>> f.tell() 0 >>> f.write('test line 1\n') # add 12-char string [0-11] >>> f.tell() 12 >>> f.write('test line 2\n') # add 12-char string [12-23] >>> f.tell() # tell us current file location (end)) 24
当我在我的解释器中运行相同的代码时,我得到的是13L代替12,26L代替24。 我在Windows上运行的是Python 2.5。
关于版本的行为或tell()函数,有什么变化吗?tell()是怎么决定文件中的位置的?
谢谢,祝好
4 个回答
0
在编程中,有时候我们需要在代码里使用一些特定的符号或者字符。这些符号可能会影响代码的运行,或者让代码变得难以理解。为了避免这些问题,我们可以使用转义字符。转义字符就是在某些字符前面加上一个特定的符号,通常是反斜杠(\),这样编程语言就知道我们是想要使用这个字符,而不是把它当作代码的一部分。
比如说,如果我们想在代码中使用一个引号("),但又不想让它被当作字符串的结束符号,我们就可以在引号前面加上反斜杠,变成\"。这样,编程语言就会把它当作普通字符处理,而不是结束字符串。
总之,转义字符帮助我们在代码中安全地使用一些特殊符号,让代码更清晰,也避免了潜在的错误。
>>> f = open('c:\\temp\\foo', 'w+')
>>> f.tell()
0L
>>> f.write('test line 1\n')
>>> f.tell()
13L
>>> g = open('c:\\temp\\bar', 'wb+')
>>> g.tell()
0L
>>> g.write('test line 1\n')
>>> g.tell()
12L
>>>
1
这是因为在Windows系统中,换行符是由两个字符组成的,分别是CR和LF。而在Unix系统中,换行符只有一个字符,就是LF。默认情况下,Python会把\n
转换成你操作系统所使用的换行符。
你看到的L
只是表示这个数字是一个长整型,也就是比普通整数能表示更大范围的数字。
3
你的文件是以文本模式打开的。在这种模式下,Windows上的Python会在Windows的换行符和Unix的换行符之间进行转换。在Windows中,换行符由两个字符组成,而在Unix中,换行符只有一个字符('\n'
),所以你看到的结果是正常的。
如果你以二进制模式打开文件,就不会有这些转换了。
f = open('/tmp/x', 'wb+')
这样你从tell()
得到的结果也会是12和24。