大佬教程收集整理的这篇文章主要介绍了python 中使用 open 函数和 a+ 模式的奇怪结果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是关于具有 open
模式的 Python 内置 a+
函数。首先,从 this thread,我知道对于 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()
确实改变了一些东西——不仅仅是报告位置——在这种情况下。如果有人能告诉我这背后的逻辑,我将不胜感激。
此类示例非常依赖于实现,如果您想获得确切答案,则必须深入研究源代码。
实际上,您正试图以不希望的顺序使用这些方法来获得不希望的结果。我知道我没有在这里提供关于为什么会发生这种情况的解决方案,但这里是之前提出的一些问题,他们仍然没有真正提供您所寻求的详细解释。
总而言之,做我的客人,继续阅读源代码,了解幕后发生的事情并向我们解释问题所在。如果您认为这会花费很多时间(我从经验中知道),请按顺序使用这些方法,并避免歧义和不受欢迎的行为。就像@Blckknght 说的,除非你愿意把它扑灭,否则不要玩火。
归根结底,如果仔细检查,这实际上可能是一个安全问题,但我怀疑,因为您没有溢出任何内容或覆盖到意外的地方,因为对此类操作有各种检查和控制。
Weird file seeking behaviour
Python 3 tell() gets out of sync with file pointer in append+read mode
以上是大佬教程为你收集整理的python 中使用 open 函数和 a+ 模式的奇怪结果全部内容,希望文章能够帮你解决python 中使用 open 函数和 a+ 模式的奇怪结果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。