向Python字典文件写入内容后顶部出现乱码的原因排查
问题:向Python字典文件写入数据后出现菱形乱码字符
我尝试直接向存储字典数据的Python文件写入文本,脚本运行正常,能把所需数据以键值对形式写入文件内的字典,但脚本结束后查看文件,顶部出现带问号的菱形乱码字符。#$%$#是字典文件中的标记注释,用于指定插入键值对的位置。
原代码:
def add_new_value(key, var): total = ",'"+key+"'"+":"+var+" #$%$#" print(total) with open("TheseusDictionary.py","r+", encoding = "utf-8") as intent: read=intent.read() with open("TheseusDictionary.py", "w+", encoding = "utf-8") as far: print("second phase complete") print(read) read = read.replace("#$%$#",total) intent.write(read) add_new_value("False", "1")
乱码原因:
乱码是重复打开文件的操作导致文件内容和指针逻辑混乱造成的:
- 用
r+模式打开文件并读取内容后,文件指针停在文件末尾。 - 紧接着用
w+模式打开同一个文件,这个模式会直接清空原文件内容,内层with块执行完毕后文件被关闭。 - 回到外层的
intent文件对象时,原文件已经被清空,此时在原本的指针位置(文件末尾)写入修改后的内容,就会导致文件开头出现空白或乱码——本质是内容写入位置偏移,加上编码层面的残留问题。
另外代码存在逻辑冗余:嵌套打开同一个文件完全没必要,w+清空文件的操作直接破坏了后续写入的基础。
修正后的代码:
def add_new_value(key, var): # 用f-string简化字符串拼接 total = f",'{key}':{var} #$%$#" print(total) # 分两步:先读再写,避免指针和文件清空的问题 with open("TheseusDictionary.py", "r", encoding="utf-8") as f: content = f.read() content = content.replace("#$%$#", total) with open("TheseusDictionary.py", "w", encoding="utf-8") as f: f.write(content) add_new_value("False", "1")
内容的提问来源于stack exchange,提问作者Thornton Raza
相关产品推荐
相关产品推荐

