2

我在解释器中玩耍,file.write() 方法表现得很奇怪,我希望有人能解释一下。

>>> file.seek(0)
>>> file.tell()
0
>>> file.readline()
'The Project Gutenberg EBook of The Adventures of Sherlock Holmes\n'
>>> file.tell()
65
>>> file.realine()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'file' object has no attribute 'realine'
>>> file.readline()
'by Sir Arthur Conan Doyle\n'
>>> file.tell()
91
>>> file.write("line\n")
>>> file.tell()
4101
>>> 

为什么 file.write("line\n") 会跳转到 4101?

文件是这个的副本:http ://norvig.com/big.txt在 r+ 模式下打开

4

2 回答 2

6

Python 的一些实现readline. 所以调用后readline文件句柄的位置不一定是刚刚读取的行尾。

于 2013-09-10T19:40:46.970 回答
2

在这里工作的不仅仅是缓冲区:如果您要混合读取和写入文件,则必须seek()在从读取切换到写入或从写入切换到读取之间进行文件定位操作(例如)。“必须”表示该行为未定义,否则它可能会或可能不会在任何给定平台上工作,并且在单个平台上可能在某些情况下似乎有效但在其他情况下无效。这是我在 2005 年给出的答案的链接(哈哈!这是一个老问题),其中包含对 C 标准的引用(Python 的大部分文件 I/O 行为都继承自平台 C 库):

https://mail.python.org/pipermail/python-bugs-list/2005-August/029886.html

于 2013-09-10T23:53:27.547 回答