You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 22:10:16