我有一个大约100 GB的.csv文件,并希望用python 3.5.4将其拆分为1 GB文件(用于记录:))。
我在下面写了split_csv('filename.csv')
函数。
我的问题是如何让它更快。这是必要的,因为我将定期拆分巨大的.csv文件的新版本。
备注(包含编辑):
1GB .csv文件应该在行结束的地方拆分。所以他们将“约”1GB。不完全是。
导入操作系统 将pandas导入为pd 导入csv 进口时间
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")
答案 0 :(得分:-1)
使用file.read(size)
将从您的文件中读取size
个字节。
使用file.readline()
将只读取文件中的一行而不加载整个文件。
如果您只想创建1GB块,请使用第一块。
如果要创建大约1GB大小的.csv文件,请使用第二个文件并在每次写入时计算输出文件的大小。