Python文本文件中'r+'模式的读写行为出现意外情况

3

我尝试在Python文本文件中打开r+模式,执行读写操作。然而,无论我读取多少个字符(比如'fo.read(5)'),在执行写操作(比如'fo.write("random")')之后,文本都会被写入/追加到文件的末尾。

fo = open("C:/Users/Dell/Desktop/files/new.txt",'r+')
fo.read(5)
fo.write('random')
fo.close()

我之前期望所写的文本(在这个例子中是“random”)从第六个字符开始被写入到文本文件,但实际上却被写在了文本文件的末尾。这种行为可能有什么可能的解释?

1个回答

2
这绝对看起来像一个bug。
解决方法是在写入之前明确地寻找当前文件位置:
```python f.seek(f.tell()) f.write(b"some data") ```
"Original Answer"翻译成"最初的回答"
fo = open("C:/Users/Dell/Desktop/files/new.txt",'r+')
fo.read(5)
fo.seek(fo.tell())
fo.write('random')
fo.close()

编辑:如@Blckknght所指出的那样,这是Windows操作系统C级实现中的已知问题。您可以参考初学者Python: 读写同一文件进行参考和讨论,尽管该链接的问题涉及Python 2,在那里相同代码的行为是不同的(写入要么什么也不做,要么产生一个OSError)。请注意,如果您使用的是其他操作系统,则可能不存在此问题。

我相信这是(误)记录的行为。在某些平台上,如果您在不间隔地插入“seek”的情况下同时“读取”和“写入”文件,则未定义会发生什么。 - Blckknght
谢谢。我已经找到之前的讨论并相应地更新了我的答案。我不会将这个问题标记为重复,因为那个问题是针对Python 2的,而那里的行为是不同的。 - blhsing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接