如何用Python读取大TXT文件中的多个指定数据块并整理为列表
Python提取大型TXT中指定数据块的解决方案
针对你的需求,我修改了代码,实现只提取每个data Information块内的指定字段,忽略无关内容,同时适配大型文件(逐行读取不占用过多内存):
# 定义需要提取的字段顺序 REQUIRED_FIELDS = ['ID', 'Number', 'Code', 'Branch', 'Source', 'Comments'] all_data = [] current_block = [] in_block = False # 逐行读取文件,适合处理大型TXT with open('myfile.txt', 'r') as file: for line in file: stripped_line = line.strip() # 检测数据块开始标记,开启提取状态 if '- - - - - - data Information - - - - - - -' in stripped_line: in_block = True current_block = [] continue # 检测数据块结束标记,保存当前块并退出提取状态 if in_block and '************************************************' in stripped_line: # 确保Comments字段即使为空也能被补全 if len(current_block) < len(REQUIRED_FIELDS): current_block.append(['Comments', '']) all_data.append(current_block) in_block = False continue # 在数据块内,处理带冒号的有效字段行 if in_block and ':' in stripped_line: key, value = stripped_line.split(':', 1) # 仅按第一个冒号分割,避免值内冒号干扰 key = key.strip() value = value.strip() # 只保留指定字段,按顺序添加到当前块 if key in REQUIRED_FIELDS: current_block.append([key, value if value else '']) # 输出所有提取到的数据块 for idx, data_list in enumerate(all_data): print(f"数据块 {idx+1}:") print(data_list)
代码关键说明
- 状态控制:用
in_block变量标记是否处于有效数据块内,跳过所有无关行 - 字段过滤:通过
REQUIRED_FIELDS锁定目标字段,确保只提取需要的内容 - 内存友好:逐行读取文件,无需一次性加载整个大文件到内存
- 边界兼容:自动识别数据块的开始/结束标记,同时处理Comments字段为空的场景
输出格式示例(对应你提供的文件内容):
数据块 1: [['ID', '000'], ['Number', '48889'], ['Code', '001'], ['Branch', '06789'], ['Source', 'Document1'], ['Comments', '']] 数据块 2: [['ID', '001'], ['Number', '48890'], ['Code', '002'], ['Branch', '06789'], ['Source', 'Document2'], ['Comments', '']] 数据块 3: [['ID', '002'], ['Number', '48891'], ['Code', '003'], ['Branch', '06789'], ['Source', 'Document2'], ['Comments', '']]
内容的提问来源于stack exchange,提问作者Aftab
相关产品推荐
相关产品推荐

