Python 3覆盖文件部分内容致文件为空的问题及解决
解决文件修改时被清空的问题
嘿,我懂你碰到的糟心事了——本来只想修改文件里的部分内容,结果用w+模式打开后,直接把文件弄成空的了对吧?问题核心就出在文件打开模式上,咱们调整一下就能搞定。
为啥w+会把文件弄空?
你用的w+模式,本质是「先把文件内容彻底清空,再打开进行读写操作」。所以程序一执行open(fname + ".txt", "w+"),文件里原有的内容就被删掉了,后面的读操作根本读不到东西,最后自然只剩个空文件。
正确的打开方式
根据你的需求(覆盖部分内容而非全量替换),换成r+模式就对了——这个模式是读写共存,且不会清空原有文件内容,完美匹配你的场景。
修改后的代码开头部分应该是这样:
import math for fname in store: # 把w+替换成r+即可 with open(fname + ".txt", "r+") as f: for line in f: c = store[fname] line_parts = line.split(",") x = (c-1) % len(line_parts) y = math.floor((c-1)/len(line_parts)) # ... 你的后续内容处理代码
小提醒
用r+模式时要注意文件指针的位置:
- 刚打开文件时,指针默认在文件开头
- 如果读完内容后要写入修改,记得用
f.seek()把指针移到你要修改的位置,避免覆盖错误内容 - 要是你的修改会改变内容长度(比如替换的字符串和原串长度不一样),直接用
r+可能会导致内容错乱,这种情况建议先把整个文件内容读进内存,修改完再用w模式重新写入(不过根据你的编辑说明,调整打开方式就能解决,应该是内容长度不变的场景)
内容的提问来源于stack exchange,提问作者The Eye
相关产品推荐
相关产品推荐

