如何用Python分块读取超大文本文件并合并分析绘制直方图?
超大TXT文件分块读取解决方案
优化后的分块读取函数
你的原代码存在效率冗余(比如用列表判断行号、多余的手动关文件操作),以下是高效的分块读取并合并数据的函数:
def read_large_file_in_chunks(file_path, chunk_size=50000): all_lines = [] with open(file_path, 'r') as fp: while True: # 批量读取指定行数的内容 chunk = fp.readlines(chunk_size) if not chunk: # 无更多数据时终止循环 break # 处理每行并批量添加到总列表 processed_chunk = [line.strip() for line in chunk] all_lines.extend(processed_chunk) return all_lines # 使用示例 file_name = '/home/lam/Downloads/C3--Trace--00001.txt' full_data = read_large_file_in_chunks(file_name, chunk_size=50000)
核心优化说明
- 用
readlines(chunk_size)直接批量读取,替代逐行枚举判断的低效逻辑 - 用
extend批量添加数据,比多次append执行效率更高 - 保留
with语句自动管理文件句柄,无需手动调用close() - 自动适配最后一块不足指定行数的情况
内存友好的直方图优化方案
如果你的最终目标是绘制直方图,完全不需要把所有数据存入内存,可以边读边统计数据分布,避免加载2.7GB数据到内存的压力:
from collections import defaultdict def calculate_histogram_in_chunks(file_path, chunk_size=50000): histogram = defaultdict(int) with open(file_path, 'r') as fp: while True: chunk = fp.readlines(chunk_size) if not chunk: break for line in chunk: value = line.strip() # 若数据为数值类型,需转换为int/float,示例: # value = float(value) histogram[value] += 1 return histogram # 生成直方图数据并绘图 hist_data = calculate_histogram_in_chunks(file_name) import matplotlib.pyplot as plt plt.bar(hist_data.keys(), hist_data.values()) plt.show()
内容的提问来源于stack exchange,提问作者Kia
相关产品推荐
相关产品推荐

