Python tell()在当前文件中的位置表现不同

时间:2011-03-03 05:18:44

标签: python

在本书 - 核心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()有什么变化吗?如何判断文件中的位置。

谢谢和问候

4 个答案:

答案 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',因此您将获得额外的字符数。