如何将大CSV数据文件拆分为单独的数据文件?
我有一个CSV文件,第一行是变量的名字,后面的行是数据。有没有什么好的方法可以把它拆分成多个文件,每个文件只包含一个变量,使用Python来实现?这个方法能否应对大文件的情况?比如说,如果输入文件有100G那么大呢?我想用分而治之的策略,但对Python还不太熟悉。提前谢谢你的帮助!
输入文件的样子是这样的:
var1,var2,var3
1,2,hello
2,5,yay
...
我想创建3个(或者更多)文件,分别是var1.csv、var2.csv、var3.csv,文件的内容应该像这样:
文件1var1
1
2
...
文件2
var2
2
5
...
文件3
var3
hello
yay
6 个回答
1
打开n个输出文件,和一个输入文件,然后一行一行地读取输入文件的内容。把每一行切分成n个部分,然后把这些部分写入到每个输出文件中。你每次只在内存中保存一行内容,(我想这行内容不会有100GB吧?)
1
如果Python不是必须的,
awk -F"," 'NR==1{for(i=1;i<=NF;i++)a[i]=$i}NR>1{for(i=1;i<=NF;i++){print $i>a[i]".txt"}}' file
2
只要列的数量不是特别多(比如超过你在平台上能同时打开的文件数量),行的数量和总大小就没什么大问题(当然前提是你的磁盘上有足够的空闲空间;-) 因为你每次只处理一列 -- 我建议使用以下代码:
import csv
def splitit(inputfilename):
with open(inputfilename, 'rb') as inf:
inrd = csv.reader(inf)
names = next(inrd)
outfiles = [open(n+'.csv', 'wb') for n in names]
ouwr = [csv.writer(w) for w in outfiles]
for w, n in zip(ouwr, names):
w.writerow([n])
for row in inrd:
for w, r in zip(ouwr, row):
ouwr.writerow([r])
for o in outfiles: o.close()