Python使用ast.literal_eval读类字典文件报InvalidSyntax错误如何解决
语法错误原因与修复方案
错误原因
ast.literal_eval要求输入内容必须是完全符合Python语法的字面量表达式,你当前的类字典字符串存在3个语法问题:
- 所有字典键(如
Attribute_1、created_by等)都没有加引号,不符合Python字典的语法规则 - 部分值(如
Value1)没有加引号,会被识别为未定义变量 - 时间值
2021-06-10T15:06:41.846-00:00没有加引号,Python无法直接识别为合法字面量
修复思路
先通过正则表达式预处理每行字符串,将其转换为标准JSON格式,再用json模块完成解析,不需要修改源文件。
完整修复代码
import re import json # 预处理正则规则 QUOTE_KEY_PATTERN = re.compile(r'(\w+):') QUOTE_VALUE_PATTERN = re.compile(r':(\w+)([,}])') QUOTE_DATE_PATTERN = re.compile(r'(\d{4}-\d{2}-\d{2}T[\d:.]+-\d{2}:\d{2})') with open('file_name.txt','r') as file: for line in file: line = line.strip() if not line: continue # 预处理字符串为合法JSON格式 line = QUOTE_KEY_PATTERN.sub(r'"\1":', line) line = QUOTE_VALUE_PATTERN.sub(r':"\1"\2', line) line = QUOTE_DATE_PATTERN.sub(r'"\1"', line) # 解析JSON data = json.loads(line) # 提取Attribute_2的值 print(data["Attribute_2"])
额外注意点
原代码中print(dict[2])的写法是错误的,Python字典需要通过键名索引,不能用位置下标,应改为通过Attribute_2键名取值;同时不要使用dict作为变量名,会覆盖Python内置的字典类型。
内容的提问来源于stack exchange,提问作者Shivanshu
相关产品推荐
相关产品推荐

