我注意到python文件处理程序在append模式下创建时有一个奇怪的行为。在下面的示例中,ofh.tell()
在我第一次以追加模式使用它时返回0
。
ofh = open("test.txt","wb")
print ofh.tell() # output: 0
ofh.write("asdf")
print ofh.tell() # output: 4
ofh.close()
ofh = open("test.txt","ab")
print ofh.tell() # output: 0
ofh.seek(0,2) # seek to end of file
print ofh.tell() # output: 4
为了进行一些安全检查,在这种情况下,我需要它返回“实际”位置(4)。
手动查找到文件结尾是不是一种方法?
观察到的行为有什么好的理由吗?返回一个与数据写入位置不同的位置似乎不是一个好主意。
我使用的是Python2.7.10和Windows764bit。
最佳答案
在python 2下,append mode表示every write goes to the end of the file。文件指针可能真的从零开始,但这并不重要,因为它会在每次写入时寻找结束。
注意,seek()
和tell()
在append模式下基本上是无用的,因为前者总是被隐式seek to end覆盖。如果需要在没有此行为的情况下附加到文件,请在r+b
模式下打开它,然后手动查找到文件的结尾。
关于python - 如果未手动查找到eof,则在以追加模式打开的Python文件对象上调用tell()会返回0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31680677/