Python 字符串到列表的转换-分隔符问题
更新: ast.literal_eval的结果是:Python 字符串到列表的转换-分隔符问题,python,python-3.x,Python,Python 3.x,更新: ast.literal_eval的结果是: ValueError: malformed node or string: <_ast.Name object at 0x1e20594a8> 进入: *大规模地 注意:有许多列表,每个列表的大小都是唯一的,其值的长度也是唯一的。最明显的问题是“Doe,John”中的逗号 我尝试的是: 我可以。把头发的边缘分开刮,但我希望有一个更简单的解决办法 我尝试使用eval、ast.literal\u eval和ast.parse显然,我不
ValueError: malformed node or string: <_ast.Name object at 0x1e20594a8>
进入:
*大规模地
注意:有许多列表,每个列表的大小都是唯一的,其值的长度也是唯一的。最明显的问题是“Doe,John”中的逗号
我尝试的是:
我可以。把头发的边缘分开刮,但我希望有一个更简单的解决办法
我尝试使用eval、ast.literal\u eval和ast.parse显然,我不知道我在做什么
示例代码:
输出样本:
['Social Perception', 'Perception, Social', 'Perceptions, Social', 'Social Perceptions']
它看起来就像一个列表,但我需要它实际上是一个列表
谢谢大家! 原始答案
如果它看起来像一个列表,那么
eval(your_text)
将它转换为适当的列表。就这么简单
更新
刚才在上面的链接中看到了答案。
导入ast
然后
ast.literal\u eval
这确实是正确的做法 引发了异常:错误:未定义名称“fubar”。我找出了问题所在,并将随解决方案发表评论。谢谢,当有更好的选项时,请不要建议邪恶评估:@Matthias这些选项是什么?@AsherSebban:ast.literal\u评估速度较慢,但功能尽可能全面,无需引入安全漏洞,解析任何合法的Python literal表达式或json.loads更快,但仅适用于json,它不如Python文本灵活。您的输入似乎有未加引号的字符串,例如fubar,因此eval可能无法正确解析这些字符串,而只能通过加载现有fubar变量来解析,这可能不是您想要的。听起来您的输入可能是JavaScript文本,而JSON不允许。
'''
File contains a list of dictionaries
For each dictionary, one key contains a nested list
Except, the list is actually a string, which is annoying
'''
for dictionary in my_file:
for key,value in dictionary.items():
if key == 'mylist':
print(value)
['Social Perception', 'Perception, Social', 'Perceptions, Social', 'Social Perceptions']
eval(your_text)