用python快速将巨大的.csv拆分成磁盘

问题描述 投票:-1回答:1

我有一个大约100 GB的.csv文件,并希望使用python 3.5.4将其拆分为1 GB文件(用于记录:))。

我在下面写了函数split_csv('filename.csv')

我的问题是如何让它更快。这是必要的,因为我将定期拆分巨大的.csv文件的新版本。

备注(包含编辑):

  • 我想在磁盘上做。它不适合RAM。
  • 1GB .csv文件应该在行结束的地方拆分。所以他们将“约”1GB。不完全是。 import os import pandas as pd import csv import time def split_csv(file,filesize = 1000,header ='T'):start = time.time() with open(file, 'r', encoding='utf8', newline='') as infile: datareader = csv.reader(infile) outfile_iterator=100001 outfilename = file.split('.')[0] outfilename = outfilename+'_'+str(outfile_iterator)+'.csv' o = open(outfilename, 'w',newline='') outfile = csv.writer(o, delimiter=',', lineterminator="\r\n") print('writing to ',outfilename) total_row_count=0 row_count = 0 for row in datareader: if header=='T' and total_row_count==0: header_row=row print('header: ',header_row) outfile.writerow(row) row_count = row_count + 1 total_row_count=total_row_count+1 if os.stat(outfilename).st_size > (filesize*1048576) : print('rowcount: ',row_count) row_count = 0 o.close() outfile_iterator = outfile_iterator + 1 outfilename = file.split('.')[0] outfilename = outfilename+'_'+str(outfile_iterator)+'.csv' o = open(outfilename, 'w',newline='') outfile = csv.writer(o, delimiter=',', lineterminator="\r\n") print('writing to ',outfilename) if header=='T': outfile.writerow(header_row) print('header: ',header_row) print('rowcount: ',row_count) infile.close() o.close() elapsed = (time.time() - start) print(elapsed, " seconds")
python csv bigdata
1个回答
-1
投票

使用file.read(size)将从您的文件中读取size字节。

使用file.readline()将只读取文件中的一行而不加载整个文件。

如果您只想创建1GB块,请使用第一个块。

如果要创建大约1GB大小的.csv文件,则使用第二个文件并在每次写入时计算输出文件的大小。

© www.soinside.com 2019 - 2024. All rights reserved.