Python tell()在当前文件中的位置行为不同

Python tell()在当前文件中的位置行为不同,python,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 f

在《核心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 >>>f=打开('/tmp/x','w+')) >>>f.tell() 0 >>>f.write('testline 1\n')#添加12个字符字符串[0-11] >>>f.tell() 12 >>>f.write('testline 2\n')#添加12个字符字符串[12-23] >>>f.tell()#告诉我们当前文件位置(结束)) 24 当我在解释器中运行相同的代码时,我用13L代替12,用26L代替24。 我正在Windows上运行python 2.5

版本中的行为或tell()是否有任何变化?tell如何确定文件中的位置


感谢并问候

这是因为Windows中的换行符是两个字符,CR和LF。在Unix上,它们只是一个。默认情况下,Python会将
\n
转换为操作系统的换行符概念


您看到的
L
简单地告诉您该数字是一个长整数。

您的文件以文本模式打开。在这种模式下,Windows上的Python在Windows行尾和Unix行尾之间进行转换。在Windows上,行尾是两个字符,而在Unix上是一个字符(
'\n'
),因此您的结果是预期的

如果以二进制模式打开文件,则无法获得这些翻译

f = open('/tmp/x', 'wb+')

你也可以从tell()中得到12和24。

这是因为换行符。:)
>>> 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
>>> 
在Unix上是“\n”和Mac“\r”,最有可能的是核心python的作者正在使用它。
您在Windows上,它是'\r\n',因此您将获得额外的字符计数。

+1以了解Python版本和操作系统等详细信息。很少有人这么做。谢谢大家的回复。但是当我对文件执行f.read()时,会得到“\n”。我没有看到“\r\n”。如何读取实际的行分隔符?找到了答案,如果以rb+模式打开文件,则可以读取\r\n。再次感谢大家的回复。