Python如何将无引号字符串项的字符串列表转换为列表?
解决CSV无引号列表项的解析问题
方法1:正则表达式自动补全引号
用正则匹配列表中逗号分隔的内容,给每个无引号的项加上双引号,让字符串符合Python列表语法,再用ast.literal_eval解析。示例代码:
import csv import ast import re # 匹配列表中括号/空格后、逗号/括号前的内容 pattern = re.compile(r'(?<=[\[\s])([^,\]]+)(?=[,\]])') with open('your_file.csv', 'r') as f: reader = csv.reader(f) for row in reader: # 给每个列表项添加双引号 modified_list_str = pattern.sub(r'"\1"', row[1]) # 正常解析为Python列表 movie_list = ast.literal_eval(modified_list_str) print(row[0], movie_list)
方法2:手动分割处理(适用于项内无逗号的场景)
如果列表里的内容本身不含逗号(比如电影名里没有逗号),可以直接切割字符串处理:
import csv with open('your_file.csv', 'r') as f: reader = csv.reader(f) for row in reader: # 去掉首尾的[],按逗号分割后清理空格 list_content = row[1].strip('[]') movie_list = [item.strip() for item in list_content.split(',')] print(row[0], movie_list)
注意:如果项里包含逗号,这个方法会错误分割内容,优先用正则方法。
方法3:用第三方库解析复杂场景
如果需要处理项内有逗号、特殊符号的情况,可以用pyparsing库做宽松解析:
先安装库:
pip install pyparsing
再用以下代码处理:
import csv from pyparsing import Word, alphas, nums, OneOrMore, delimitedList, Combine # 定义允许出现在项里的字符:字母、数字、空格、&等 item_rule = Combine(OneOrMore(Word(alphas + nums + ' &'))) # 定义无引号列表的语法规则 list_rule = '[' + delimitedList(item_rule) + ']' with open('your_file.csv', 'r') as f: reader = csv.reader(f) for row in reader: # 解析列表字符串 parsed_result = list_rule.parseString(row[1]).asList() # 剔除首尾的[],得到真实列表内容 movie_list = parsed_result[1:-1] print(row[0], movie_list)
内容的提问来源于stack exchange,提问作者JohnJ
相关产品推荐
相关产品推荐

