Python在w模式文件操作块内嵌套r模式读取无输出问题咨询
问题结论
你的理解存在错误,具体原因和修复方案如下:
原因分析
- 首先要明确:文件处于打开状态时并不是不能被读取,这是常见的认知误区。你遇到无输出的核心原因是:调用
wf.write()之后,写入的内容默认还停留在程序的内存缓冲区中,还没有真正刷入磁盘的test.txt文件,此时直接打开文件读取,读取的是还未写入新内容的磁盘文件,自然得到空结果。 with语句确实会在对应代码块执行结束后才关闭文件,而文件关闭时会自动触发缓冲区刷新操作,把内存中暂存的内容同步到磁盘。你分开操作时写模式的with块先执行完毕、关闭文件、完成刷盘,再打开读就能读到内容,正是这个逻辑导致的差异。
修复方案
方案1:手动刷新缓冲区
你可以在写完内容后手动调用wf.flush()强制把缓冲区内容刷入磁盘,再嵌套读取就能正常拿到内容,修改后代码如下:
with open('test.txt', 'w') as wf: nicknames = ["Big Tuna", "Prison Mike", "Booster Seat"] wf.write('\n'.join(nicknames)) # 手动触发缓冲区刷新,将内容写入磁盘 wf.flush() with open('test.txt', 'r') as rf: print(rf.read())
方案2:使用可读可写模式避免嵌套打开文件
你也可以直接用w+可读可写模式打开文件,不需要嵌套两次open调用,写完内容后把文件指针移动到开头再读取即可:
with open('test.txt', 'w+') as f: nicknames = ["Big Tuna", "Prison Mike", "Booster Seat"] f.write('\n'.join(nicknames)) # 移动文件指针到文件起始位置 f.seek(0) print(f.read())
内容的提问来源于stack exchange,提问作者CoreVisional
相关产品推荐
相关产品推荐

