如何将文本追加到另一个Python文件内的指定列表或字典变量中
实现修改Python文件中指定变量值的方案
你原来的代码用追加模式直接写内容到文件末尾,只会把文本拼在文件最后,无法修改已存在的列表/字典结构,正确的实现逻辑是先读取目标文件中变量的当前值,修改后再全量写回文件。
场景1:目标变量是列表w
实现代码如下:
import ast # 读取Testfile.py的内容,解析出w的当前值 with open("Testfile.py", "r", encoding="utf-8") as f: content = f.read() # 拆分赋值语句,提取等号右侧的字面量,用ast安全解析 w_current = ast.literal_eval(content.split("=", 1)[1].strip()) # 追加新元素到列表 new_item = "Hello World" w_current.append(new_item) # 把修改后的列表重新写回文件 with open("Testfile.py", "w", encoding="utf-8") as f: f.write(f"w = {repr(w_current)}")
执行后Testfile.py的内容就会变成w = ["bob", "joe", "emily", "Hello World"]。
场景2:目标变量是字典w
实现逻辑和列表完全一致,仅修改变量更新部分的代码即可:
import ast # 读取Testfile.py的内容,解析出w的当前值 with open("Testfile.py", "r", encoding="utf-8") as f: content = f.read() w_current = ast.literal_eval(content.split("=", 1)[1].strip()) # 新增键值对 new_key = "Hello World" w_current[new_key] = 0 # 把修改后的字典重新写回文件 with open("Testfile.py", "w", encoding="utf-8") as f: f.write(f"w = {repr(w_current)}")
执行后Testfile.py的内容会变成w = {"bob": 0, "joe": 0, "emily" : 0, "Hello World": 0}。
注意事项
- 如果Testfile.py中包含多行代码,你需要先定位到
w =开头的行做单独解析,其余行内容原样保留再写回即可。 - 这里用
ast.literal_eval只会解析Python合法字面量,不会执行任意代码,安全性远高于直接用eval。 repr()方法会自动把Python对象转为符合语法规则的字符串,不需要手动处理引号、逗号等格式。
内容的提问来源于stack exchange,提问作者Jojo Momo
相关产品推荐
相关产品推荐

