python处理超大csv转成excel

一个csv大约500M,1000多万行,只有几列,纯数字。
excel工作表只能放104万行,所以要分块写入多个工作表
我用python处理一个大约1小时太慢了。

把csv切割成104万行小块的csv,速度很快1分钟不要。
就是写入excel太慢,有啥好办法吗
谢谢。
图片下面我写的代码
比较笨拙,请指教

img

既然已经切成好多文件了,那用线程池啊,把cpu的几个核都充分利用起来,别让它闲着

这要看你的cpu处理能力了

作为一名资深的IT专家,我可以尝试提供一些解决方案来解决这个问题。首先,您可以尝试使用Python中的csv模块来读取和处理csv文件。您可以使用csv模块中的split()和write()方法来将csv文件分割成多个小的csv文件,每个文件可以写入到不同的excel工作表中。您需要将每个小的csv文件写入到不同的excel工作表中,可以通过使用Python中的os模块和shutil模块来实现。您可以将每个小的csv文件写入到不同的excel工作表中,直到您需要的excel工作表已满。您需要使用os模块中的listdir()方法来获取每个小的csv文件的名称,然后使用shutil模块中的mkdir()方法来创建一个新工作表,并将每个小的csv文件写入到该工作表中。

在将csv文件写入到excel文件中时,您需要使用Python中的open()和write()方法来将csv文件写入到excel文件中。您可以将每个小的csv文件写入到不同的excel工作表中,直到您需要的excel工作表已满。您需要使用Python中的open()和write()方法来打开excel文件,并指定要写入的行和列,然后使用write()方法将csv文件的内容写入到excel文件中。

以上解决方案需要一定的编程经验和技能,但是如果您熟悉Python和csv模块,这些解决方案应该可以解决您的问题。

以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:

读取大CSV文件并写入Excel是一个常见的需求,出现慢的原因有几个:

  1. Excel工作表行数限制:每个工作表只能有104万行,所以需要分块写入,这会增加I/O次数,减慢速度。
  2. Python使用的ExcelWriter不是最优的:默认使用openpyxl,其Excel写入性能不是最高。
  3. 数据量太大:1000多万行占用空间500M,这是个比较大的CSV文件,处理速度相对较慢也在意料之中。

要提高速度,可以从以下几个方面 optimzie:

  1. 使用pandas.read_csv()读取CSV,而不是纯Python读取,pandas读取CSV速度较快。
  2. 使用xlwings或XlsxWriter替代openpyxl写入Excel。这两个库的写入性能高很多,可以显著减少写入时间。
  3. 分块 CSV 并发写入 Excel。可以将 CSV 分成多个块,然后启动多个线程/进程同时将这些块写入 Excel,最后合并工作表。这样可以大大减少总写入时间。
  4. 如果数据量真的太大,可以考虑:
  • 不写入 Excel,直接将分块后的 CSV 文件输出,由其他程序读取。
  • 选取你需要的几列数据,项目出一个小的 CSV,再写入 Excel。不必处理全量数据。
  • 如果部分数据可以取样,可以考虑从 CSV 取样一部分数据出来。

一个简单的实现代码可以是:

python
import pandas as pd
from xlsxwriter import Workbook

CHUNKSIZE = 1000000  # 每100000行为一块
excel_writer = Workbook('data.xlsx')

for df in pd.read_csv('data.csv', chunksize=CHUNKSIZE):
    df.to_excel(excel_writer, sheet_name='data')  # 用XlsxWriter写入Excel
    
excel_writer.close()

这会将data.csv分块1000000行读取,然后并发写入Excel,最后合并工作表。

希望这些优化建议能帮助你加快csv文件写入Excel的速度。要处理大数据量,优化效率至关重要。这需要对各种工具、库的性能特点有深入理解,在遇到问题时能够灵活选择最优方案。这需要在学习与实践中不断总结和进步,发现并解决问题。一步一个脚印,持之以恒,定会有所成长!