如何从按空行分隔的列名:值格式TXT文件创建DataFrame
处理大体积键值对格式TXT转Pandas DataFrame的方案
针对你2GB的大文件,直接用pd.read_csv()或者一次性转字典都会因为内存问题失败,这里提供流式逐记录处理的方案,全程低内存占用:
核心思路
利用Python生成器逐行读取文件,攒出单条记录的字典后立即输出,不把整个文件加载到内存,避免内核崩溃。
代码实现
import pandas as pd def parse_large_txt(file_path): current_record = {} with open(file_path, 'r', encoding='utf-8') as f: for line in f: stripped_line = line.strip() # 遇到空行时,判断是否完成一条记录的收集 if not stripped_line: if current_record: yield current_record current_record = {} else: # 分割列名和值,maxsplit=1避免值里带冒号的情况 col, val = stripped_line.split(': ', maxsplit=1) current_record[col] = val # 处理文件末尾无空行结尾的最后一条记录 if current_record: yield current_record # 生成器直接转DataFrame df = pd.DataFrame(parse_large_txt('your_file.txt'))
关键说明
- 内存友好:生成器每次仅在内存中保留一条记录的字典,处理完就释放,不会占用大量内存
- 兼容格式:自动处理空行分隔的记录,同时兼容文件末尾无空行的情况
- 鲁棒性:用
maxsplit=1分割键值对,避免值中包含冒号导致的分割错误
如果文件编码不是utf-8,可以修改open()函数的encoding参数(比如gbk)。
内容的提问来源于stack exchange,提问作者Alessandro Salvatore
相关产品推荐
相关产品推荐

