You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:18:30