Python读取大容量的csv文件

python按行遍历一个大文件:

with open('filename') as file:
    for line in file:
        do_things(line)

结合下文的block,读几行是没压力了,但存成csv的时候各种奇葩问题,什么str和byte的编码问题啦,什么csv一打开是各种奇葩的整数啦……


如何用python处理非常大的csv和xml
http://lethain.com/handling-very-large-csv-and-xml-files-in-python/

最后,结合另一个地方看的block控制行数,正常的csv终于可以出来了~~

with open('tianchi_mobile_recommend_train_user.csv', 'r') as fin:
        with open('user-10000.csv','w') as fout:
            block = []
            for line in fin:
                block.append(line)
                if len(block) <= 10:
                        fout.write(','.join(line.split(' ')))
                else:
                      break
            print (block)
### 高效读取大规模CSV文件的方法 对于百万级甚至更大的CSV文件,传统的Pandas可能无法满足需求,因为它通常需要将整个数据集加载到内存中。Dask是一个强大的替代方案,它能够通过并行计算和延迟执行来处理超出内存容量的数据。 #### 使用Dask高效读取大型CSV文件 Dask提供了类似于Pandas的API接口,可以轻松实现对超大数据集的操作而无需担心内存不足的问题。以下是具体方法: 1. **安装依赖** 如果尚未安装Dask库,则可以通过pip命令完成安装: ```bash pip install dask[complete] ``` 2. **导入必要的模块** 导入所需的Python库以支持数据分析任务。 ```python import dask.dataframe as dd from dask.diagnostics import ProgressBar import time ``` 3. **配置进度条(可选)** 进度条可以帮助开发者了解当前的任务状态。 ```python pbar = ProgressBar() pbar.register() # 注册全局进度条 ``` 4. **读取CSV文件** 利用`read_csv()`函数指定路径和其他参数,例如分隔符、编码方式等。 ```python df = dd.read_csv('large_file.csv') # 替换为实际文件名或路径 ``` 此处需要注意的是,Dask并不会立即加载全部数据至内存,而是创建了一个指向该数据源的对象[^2]。 5. **执行操作** 对于简单的统计分析或其他基础运算可以直接调用相应方法;而对于更复杂的逻辑则需显式触发计算过程。 ```python result = df.groupby('column_name').mean().compute() # 示例:按列求平均值 print(result) ``` 6. **性能优化建议** - 合理设置分区大小(partition size),过小可能导致过多开销,过大又容易引发资源争抢; - 尽量减少不必要的中间变量存储; - 提前规划好最终目标再逐步构建流程图谱。 --- ### 实现对比与注意事项 尽管两者都可用于处理结构化表格型数据,但在面对海量记录时表现差异明显: | 特性 | Pandas | Dask | |---------------------|----------------------------------|--------------------------------| | 数据规模 | 较适合中小尺寸 | 支持任意尺度 | | 记忆消耗 | 完整载入RAM | 分块管理 | | 易用程度 | 更贴近SQL语法习惯 | 学习曲线稍陡峭 | | 复杂查询效率 | 即刻反馈 | 受限于lazy evaluation机制 | 因此,在决定选用哪种技术之前应当充分评估项目特点以及团队熟悉度等因素综合考量[^3]。 --- ### 总结说明 综上所述,当遇到像题目描述那样涉及数百万乃至数十亿行级别的巨型CSV文档场合下,推荐优先考虑引入Dask框架作为解决方案之一。其具备良好的扩展性和灵活性,同时保留了接近原生Pandas体验的优势特性[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

o0xgw0o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值