【问题标题】:python open('file','r+') giving weird resultpython open('file','r+') 给出奇怪的结果
【发布时间】:2012-02-03 15:11:58
【问题描述】:

看了一些帖子,好像你可以用'r+'或'w+'模式打开一个文件进行读写。但是,尝试使用这些模式总是会给我带来奇怪的结果:

  1. 如果我使用'r+',调用file.read(),然后调用file.write('str'), 会出现“IOError: [Errno 0] Error”的错误
  2. 如果我使用'r+',调用file.write('str'),然后调用file.read(), 它会返回意想不到的很长的内容(看起来像里面 一些物体)
  3. 如果我使用 'w+',调用 file.read() 将返回空字符串

我要做的是打开一个文件,读取内容,修改它,然后写回。目前我用'r'打开它,更改内容,然后用'w'再次打开它并写回。这是一个好方法吗?

http://snipt.org/zglJ0有一个例子

我正在使用窗口 7 和 python 2.7.2

【问题讨论】:

  • 你能分享一个演示问题的代码sn-p吗?
  • 以上三个实验都被file.close()关闭。但是,似乎在同一个实验中同时执行 read() 和 write()(中间不调用 close())会导致奇怪的结果。
  • windows 和 linux 上都这样吗?
  • 您能否发布您正在尝试执行的代码 sn-p 吗?我写了一小段代码,它的功能完全符合预期。另外,您使用的是什么版本的 Python?
  • snipt.org/zglJ0我使用的是windows和python 2.7.2(对不起,我把代码写错了,现在是导致问题的原因:))

标签: python file file-io


【解决方案1】:

在读取和写入以更新模式打开的文件时,您必须flush()。或者我想你也可以seek()。这是由 Python 2.x 中的 Windows 文件实现中的一些奇怪行为引起的;他们在 3.x 中修复了它。

【讨论】:

  • 你好,金德尔!感谢您的回答,但 flush 方法似乎不起作用(是的,我使用的是 windows 和 python 2.7.2)。我的代码如下: '>>> f=open('f1.txt~','r+') >>> f.read() 'blablabl' >>> f.flush() >>> f.write( 'aaa') 回溯(最近一次调用):文件“”,第 1 行,在 f.write('aaa') IOError: [Errno 0] Error >>> f.close( )'
  • 你可以试试f.seek(0, 1)然后(寻找文件中的当前位置)。
  • 行得通!在这种情况下,为每个不同的操作关闭和重新打开似乎更具可读性。
  • 写一个上下文管理器应该很简单。
猜你喜欢
  • 2020-08-12
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2013-08-20
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多