Python中如何将字符串形式的int元组列表转为标准整型元组列表
字符串转整型元组列表实现方案
你从CSV读取到的[(56, 365), (62, 801)]格式字符串,本质是Python原生列表的字面量形式,可通过以下两种方式转换为对应原生数据结构:
方案一:使用标准库ast.literal_eval(优先推荐)
这是最安全、适配性最好的方案,ast.literal_eval只会解析Python基础字面量(列表、元组、数字、字符串等),不会执行任意恶意代码,不存在eval()的注入风险,无需手动处理字符串拆分逻辑。
示例代码:
import ast # 从CSV读取到的字符串内容 raw_str = "[(56, 365), (62, 801)]" tuple_list = ast.literal_eval(raw_str) # 验证结果 print(tuple_list) # 输出: [(56, 365), (62, 801)] print(type(tuple_list)) # 输出: <class 'list'> print(type(tuple_list[0])) # 输出: <class 'tuple'> print(type(tuple_list[0][0])) # 输出: <class 'int'>
只要字符串符合Python基础数据结构的字面量语法,哪怕存在少量格式空格、换行,该方法都能正常解析。
方案二:手动字符串拆分转换(自定义场景适用)
如果需要在转换过程中加入自定义格式校验,也可以手动清洗字符串、拆分片段后做类型转换:
raw_str = "[(56, 365), (62, 801)]" # 移除首尾列表标识,按元组分隔符拆分 segments = raw_str.strip("[]").split("), ") tuple_list = [] for seg in segments: # 提取元组内的两个数字,转为整型后组装 a, b = seg.strip("()").split(", ") tuple_list.append( (int(a), int(b)) )
该方法要求字符串格式完全固定,若存在多余空格、缺值等异常会直接抛出解析错误,适合格式强管控的场景。
避坑提醒
- 绝对不要直接使用
eval()做转换:eval()会执行字符串内的任意代码,若CSV文件被恶意篡改,会触发代码执行漏洞,存在严重安全风险。 - 如果CSV存储的元组列表存在空值、格式错乱问题,建议优先选择手动解析方案,在转换过程中增加异常捕获和校验逻辑。
内容的提问来源于stack exchange,提问作者Carina Sophie
相关产品推荐
相关产品推荐

