我有一个超过300GB的大型.csv文件。我想将它划分为每个100,000,000行的小文件(每行大约55-60字节)。
我编写了以下代码:
这段代码可以正常工作,我有足够的磁盘内存来一次性存储大约5.5-6 GB的数据,但速度很慢。是否有更好的方法?
编辑:
我已经编写了以下迭代解决方案:
编辑2:
我想提醒大家注意Vor的评论,他建议使用Unix/Linux分割命令,这是我找到的最快解决方案。
我编写了以下代码:
import pandas as pd
df = pd.read_csv('/path/to/really/big.csv',header=None,chunksize=100000000)
count = 1
for chunk in df:
name = '/output/to/this/directory/file_%s.csv' %s count
chunk.to_csv(name,header=None,index=None)
print(count)
count+=1
这段代码可以正常工作,我有足够的磁盘内存来一次性存储大约5.5-6 GB的数据,但速度很慢。是否有更好的方法?
编辑:
我已经编写了以下迭代解决方案:
with open('/path/to/really/big.csv', 'r') as csvfile:
read_rows = csv.reader(csvfile)
file_count = 1
row_count = 1
f = open('/output/to/this/directory/file_%s.csv' %s count,'w')
for row in read_rows:
f.write(''.join(row))
row_count+=1
if row_count % 100000000 == 0:
f.close()
file_count += 1
f = open('/output/to/this/directory/file_%s.csv' %s count,'w')
编辑2:
我想提醒大家注意Vor的评论,他建议使用Unix/Linux分割命令,这是我找到的最快解决方案。
for row in read_rows
可以改为for row_count, row in enumerate(read_rows, start=1)
,这样就不需要跟踪行号了。 - Steven Rumbalski