在本书 - 核心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()有什么变化吗?如何判断文件中的位置。
谢谢和问候
答案 0 :(得分:3)
您的文件以文字模式打开。在该模式下,Windows上的Python在Windows行结尾和Unix行结尾之间进行转换。在Windows上,行结尾是两个字符,而在Unix上它是一个('\n'
),因此您的结果是预期的。
如果以二进制模式打开文件,则不会获得这些翻译。
f = open('/tmp/x', 'wb+')
你也可以从tell()
获得12和24。
答案 1 :(得分:1)
这是因为Windows中的换行符是两个字符,CR和LF。在Unix上,他们只是一个,LF。默认情况下,Python会将\n
转换为操作系统的换行符概念。
您看到的L
只是告诉您该数字是一个长整数。
答案 2 :(得分: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
>>>
答案 3 :(得分:0)
那是因为新行。 :) 在Unix上它是'\ n'和Mac'\ r',而且很可能是core-python的作者正在使用它。 您在Windows上,它是'\ r \ n',因此您将获得额外的字符数。