如何使用Python从无换行的文本文件中提取多个字典
提取文本文件中的字典列表(Python实现)
我有一个文本文件,里面的数据格式如下(文件内使用单引号,字典之间以逗号分隔,且没有换行符):
{'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}}, {'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}}, {'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}}
我想把这些数据提取成字典列表。作为Python新手,我原本打算用readlines()读取整个文件到变量中,再通过正则表达式拆分,但找不到可靠的正则模式。最终期望得到如下结果,并能遍历输出指定键的值:
extracted_list = [ {'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}}, {'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}}, {'key1':'data','key2':'data','key3':'data','key4':{'subkey1':'data','subkey2':'data'}} ] for item in extracted_list: print(item['key1']) # 输出key1对应的数据 print(item['key4']) # 输出key4对应的子字典
推荐方法:使用ast.literal_eval()
正则表达式处理嵌套字典很容易出错,Python标准库的ast模块可以安全解析字符串形式的Python字面量,完美适配这种场景。步骤如下:
- 用
read()直接读取文件全部内容(因为文件无换行,readlines()没必要); - 给内容包裹列表方括号,让它变成合法的列表字面量字符串;
- 用
ast.literal_eval()解析成Python字典列表。
代码示例:
import ast # 读取文件内容 with open('your_file.txt', 'r', encoding='utf-8') as f: content = f.read().strip() # 包裹成列表格式,避免手动拆分逗号的麻烦 list_str = f"[{content}]" # 解析为字典列表 extracted_list = ast.literal_eval(list_str) # 验证效果 for item in extracted_list: print(item['key1']) print(item['key4'])
这个方法能正确处理嵌套结构、字符串中的特殊字符,比正则稳定得多,而且无需额外安装依赖。
备选方法:转JSON格式解析
如果数据里的字符串不包含双引号,也可以把单引号替换为双引号,转成JSON格式后解析:
import json with open('your_file.txt', 'r', encoding='utf-8') as f: content = f.read().strip() # 替换单引号为双引号,注意:如果字符串本身含双引号会失效 json_str = f"[{content}]".replace("'", '"') extracted_list = json.loads(json_str) # 验证 for item in extracted_list: print(item['key1']) print(item['key4'])
注意:如果数据存在混合引号(比如{'key':"value"}),这个方法会报错,所以优先用ast.literal_eval()。
内容的提问来源于stack exchange,提问作者Parikshit
相关产品推荐
相关产品推荐

