我的问题是关于带有模式的 Python 内置open
函数。a+
首先,从这个线程中,我知道a+
模式,随后对文件的写入将始终以文件的当前结尾结束。我编写了以下简单程序来确认这一事实:
file = 'test0.txt' # any non-empty text file
with open(file, 'a+', encoding='utf-8') as f:
f.seek(0)
f.write('added')
# print(f.tell())
cc = f.readlines() # strange!
print(cc)
是的,'added'
即使通过seek()
方法强制将流定位在文件的开头,也会附加在末尾。
我认为cc
应该是[]
,因为流位于文件的末尾。然而,这是错误的!结果是:
cc
显示附加前的所有文本added
。此外,切换到评论f.seek(0)
或切换到取消评论print(f.tell())
都会使事情变得正常:c
变成[]
预期的那样。对我来说,这意味着tell()
在这种情况下确实改变了一些东西——不仅仅是报告职位。如果有人能告诉我这背后的逻辑,我将不胜感激。