Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
'中的意外读/写行为;r+';python文本文件中的模式_Python_Python 3.x - Fatal编程技术网

'中的意外读/写行为;r+';python文本文件中的模式

'中的意外读/写行为;r+';python文本文件中的模式,python,python-3.x,Python,Python 3.x,我试图通过将python文本文件打开到r+模式来执行读写操作。但是,无论我在执行写入操作(例如“fo.write(“random”)之前读取了多少个字符(例如“fo.read(5)”),文本都会写入/追加到文件的末尾 fo = open("C:/Users/Dell/Desktop/files/new.txt",'r+') fo.read(5) fo.write('random') fo.close() 我希望正在写入的文本(在本例中为“随机”)将向前写入第6个字符,但却被写入/追加到文本文件

我试图通过将python文本文件打开到r+模式来执行读写操作。但是,无论我在执行写入操作(例如“fo.write(“random”)之前读取了多少个字符(例如“fo.read(5)”),文本都会写入/追加到文件的末尾

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

我希望正在写入的文本(在本例中为“随机”)将向前写入第6个字符,但却被写入/追加到文本文件的末尾。这种行为的可能解释是什么?

这看起来确实像一个bug

解决方法是在写入之前显式查找当前文件位置:

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 2,其中相同代码的行为是不同的(编写过程要么不执行任何操作,要么生成
OSError
)。

我相信这是有文档记录的(错误)行为。在某些平台上,如果您同时
读取
写入
一个文件而不在两者之间放置
搜索
,则会发生什么情况,这是未定义的。谢谢。我已经找到了之前的讨论,并相应地更新了我的答案。我没有将这个问题标记为重复问题,只是因为这个问题是针对Python2的,在Python2中,行为是不同的。