讲师中心 微信公众号
AI工具推荐 视频效率加速

如何高效分割并处理超大CSV文件以实现分块排序

夜涛姑娘_7514

夜涛姑娘_7514

发布时间:2026-02-09 11:55:05

|

221人浏览过

|

来源于php中文网

原创

如何高效分割并处理超大CSV文件以实现分块排序

本文介绍使用python的fileinput模块逐行读取超大csv文件,避免内存溢出,并结合数据分块策略(如按年份、国家或字段范围)实现灵活筛选与排序。

在处理GB级CSV文件时,一次性加载全部数据到内存(如用pandas.read_csv()或csv.reader配合list())极易导致内存耗尽或程序崩溃。此时,流式分块处理(streaming + chunking) 是更稳健的选择。核心思路是:不“分割文件”为物理子文件,而是逻辑分块——即在逐行读取过程中,依据业务规则(如年份区间、国家分组、数值范围等)将记录动态归类到不同容器中,再分别排序。

✅ 推荐方案:fileinput + 字典分块 + 懒排序

fileinput 模块专为大型文本文件设计,支持内存友好的逐行迭代,且自动处理编码、换行符等细节。以下是一个完整示例,将数据按「年份区间」分为4个逻辑块(如1950–1974、1975–1999、2000–2014、2015–2023),并支持用户输入查询条件后对指定块排序:

Knowledge Graph - Csv Graph Loader Generator
Knowledge Graph - Csv Graph Loader Generator

从 CSV 数据集生成图数据库加载器和三元组映射。将表格 CSV 数据转换为图数据库可直接使用的节点、边和三元组。

下载
import fileinput
from collections import defaultdict
import re

# 定义4个年份区间(可按需调整)
RANGES = [
    (1950, 1974, "mid_20th"),
    (1975, 1999, "late_20th"),
    (2000, 2014, "early_21st"),
    (2015, 2023, "recent")
]

# 初始化分块存储:{block_name: [(country, abv, year, expectancy), ...]}
blocks = {name: [] for _, _, name in RANGES}

# 流式读取CSV(跳过表头)
with fileinput.input('life_expectancy.csv', encoding='utf-8') as f:
    next(f, None)  # 跳过首行(表头)
    for line_num, line in enumerate(f, start=2):
        line = line.strip()
        if not line:  # 跳过空行
            continue
        try:
            parts = line.split(',')
            # 安全提取字段(防索引越界/类型错误)
            if len(parts) < 4:
                print(f"警告:第{line_num}行字段不足4个,已跳过")
                continue
            country = parts[0].strip('"\' ')   # 去除引号和空格
            abv = parts[1].strip('"\' ')
            year = int(parts[2])
            expectancy = float(parts[3])

            # 按年份归入对应块
            assigned = False
            for start, end, block_name in RANGES:
                if start <= year <= end:
                    blocks[block_name].append((country, abv, year, expectancy))
                    assigned = True
                    break
            if not assigned:
                print(f"提示:第{line_num}行年份 {year} 不在预设区间内,已忽略")

        except (ValueError, IndexError) as e:
            print(f"解析错误(第{line_num}行):{e}")

# 用户交互:选择块并排序
print("\n可用数据块:", list(blocks.keys()))
target_block = input("请输入要排序的块名(如 'recent'): ").strip()
if target_block not in blocks:
    print("无效块名!")
else:
    # 示例:按预期寿命降序排序
    sorted_data = sorted(blocks[target_block], key=lambda x: x[3], reverse=True)
    print(f"\n【{target_block} 块 - 按预期寿命排序前5条】")
    for i, (c, a, y, e) in enumerate(sorted_data[:5], 1):
        print(f"{i}. {c} ({a}), {y}: {e:.2f} 年")

⚠️ 关键注意事项

  • 永远校验字段数量与类型:split(',') 可能因CSV中含逗号(如 "United States, Inc.")而失效。生产环境强烈建议改用 csv.DictReader 配合 fileinput 或 pandas.read_csv(chunksize=N)。
  • 内存权衡:上述代码将每个块全部载入内存后再排序。若单块仍过大,可进一步改为「分块排序+外部归并」(如用heapq.merge),或借助数据库(SQLite临时表)。
  • 编码与BOM:确保encoding='utf-8-sig'以自动去除UTF-8 BOM头。
  • 性能优化:对高频查询场景,可将分块结果持久化为Parquet或SQLite,后续直接索引查询。

✅ 总结

真正的“分割”不是物理切分文件,而是基于业务维度的逻辑分流。fileinput 提供了轻量、可靠的流式入口,配合字典分块与sorted()函数,即可在有限内存下完成超大CSV的灵活分治与排序。对于更复杂需求(多维聚合、模糊匹配),建议逐步过渡到Dask或Polars等分布式/高性能库。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

2093

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

3334

2023.10.07

Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

340

2025.12.04

Python 数据清洗与预处理实战
Python 数据清洗与预处理实战

本专题系统讲解 Python 在数据清洗与预处理中的核心技术,包括使用 Pandas 进行缺失值处理、异常值检测、数据格式化、特征工程与数据转换,结合 NumPy 高效处理大规模数据。通过实战案例,帮助学习者掌握 如何处理混乱、不完整数据,为后续数据分析与机器学习模型训练打下坚实基础。

252

2026.01.31

Python数据分析与Pandas高级实战
Python数据分析与Pandas高级实战

本专题围绕 Python 数据分析展开,系统讲解 Pandas 的高级用法,包括数据清洗、透视表、时间序列分析以及多表合并与分组操作。通过实战案例,帮助开发者掌握高效处理与分析数据的方法,提高数据处理效率与分析能力。

691

2026.04.13

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

2885

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

4041

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

3231

2023.08.31

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn