如何读取文件中Python格式的复杂数值列表并在Python中还原
读取Python风格字面量文件并生成对应列表
你的文件内容是标准的Python字面量结构(由元组、列表、浮点数、整数组成),最安全且直接的方法是用Python自带的ast.literal_eval工具——它专门用来解析这类合法的Python字面量,比eval更安全(不会执行任意代码)。
下面是具体的实现步骤和代码:
步骤说明
你的文件里多个元组是用) (分隔的,我们需要先把它转换成合法的列表格式(用逗号分隔元素,外层包裹方括号)。如果文件里有换行或多余空格,先统一清理掉会让代码更鲁棒。
代码实现
import ast import re # 读取文件内容,替换成你的文件路径 with open("your_file.txt", "r") as file: raw_content = file.read() # 清理内容:把所有连续空白(换行、空格、制表符)换成单个空格,再去掉首尾空格 cleaned_content = re.sub(r'\s+', ' ', raw_content).strip() # 将元组之间的分隔符从 ") (" 改为 "), (",然后包裹成列表 parsable_content = f"[{cleaned_content.replace(') (', '), (')}]" # 解析成Python对象 final_list = ast.literal_eval(parsable_content) # 验证结果 print(final_list)
运行这段代码后,final_list就是你要的完全相同的数值列表结构,输出如下:
[([(515.51, 615.76), (42.28, 152.3), (223.29, 138.07)], 1), ([(382.27, 502.27), (323.54, 473.01), (212.32, 433.57)], 2), ([(188.74, 442.8), (245.7, 461.47), (391.02, 508.96)], 3)]
为什么选ast.literal_eval?
eval()会执行任何传入的Python代码,如果你的文件被恶意篡改(比如插入了删除文件的代码),eval()会直接执行,存在安全风险。而ast.literal_eval()只解析Python的字面量类型(列表、元组、数字、字符串等),完全安全,刚好匹配你的使用场景。
内容的提问来源于stack exchange,提问作者tzoukritzou
相关产品推荐
相关产品推荐

