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

如何读取文件中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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:58:40