程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了python 中使用 open 函数和 a+ 模式的奇怪结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决python 中使用 open 函数和 a+ 模式的奇怪结果?

开发过程中遇到python 中使用 open 函数和 a+ 模式的奇怪结果的问题如何解决?下面主要结合日常开发的经验,给出你关于python 中使用 open 函数和 a+ 模式的奇怪结果的解决方法建议,希望对你解决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,请注明来意。