如何在Python中将文本文件中的列表字符串转为二维列表
二维列表写入文件后读取格式不符的解决方法
问题根源
你用str()将列表转为字符串写入文件,本质是把Python列表的字符串表示(带单引号)存成文本。读取时只是将这些字符串原样读回,无法还原成嵌套列表结构;同时,Python列表的单引号格式不符合JSON规范,若尝试用JSON解析会触发Expecting value: line 1 column 2 (char 1)语法错误。
解决方法
推荐用JSON(跨语言通用)或Pickle(Python专用)来序列化/反序列化列表,避免手动处理字符串格式。
方法1:使用JSON(推荐,文本格式可编辑)
写入文件
将整个二维列表一次性写入:
import json fruits = [["banana", "apple"], ["durian", "dragon fruit"]] with open("fruits.txt", "w", encoding="utf-8") as f: json.dump(fruits, f)
或按行写入每个子列表:
import json fruits = [["banana", "apple"], ["durian", "dragon fruit"]] with open("fruits.txt", "w", encoding="utf-8") as f: for sub_list in fruits: json.dump(sub_list, f) f.write("\n")
读取文件
对应一次性写入的读取方式:
import json with open("fruits.txt", "r", encoding="utf-8") as f: fruits = json.load(f) # 输出:[["banana", "apple"], ["durian", "dragon fruit"]]
对应按行写入的读取方式:
import json fruits = [] with open("fruits.txt", "r", encoding="utf-8") as f: for line in f: sub_list = json.loads(line.strip()) fruits.append(sub_list) # 输出:[["banana", "apple"], ["durian", "dragon fruit"]]
方法2:使用Pickle(Python专用,二进制格式)
适合仅在Python环境中传输数据,无需跨语言兼容:
写入文件
import pickle fruits = [["banana", "apple"], ["durian", "dragon fruit"]] with open("fruits.pkl", "wb") as f: pickle.dump(fruits, f)
读取文件
import pickle with open("fruits.pkl", "rb") as f: fruits = pickle.load(f) # 输出:[["banana", "apple"], ["durian", "dragon fruit"]]
临时修复(不推荐)
如果必须用原文本格式读取,可以用ast.literal_eval()解析字符串为列表:
import ast fruits = [] with open("fruits.txt", "r") as f: for line in f: sub_list = ast.literal_eval(line.strip()) fruits.append(sub_list)
注意:仅当文本内容完全符合Python语法时可用,存在安全风险(若文本被恶意篡改可能执行代码),不推荐用于生产环境。
内容的提问来源于stack exchange,提问作者Zhi Qi Chew
相关产品推荐
相关产品推荐

