我需要以这种方式生成一个非常大的 csv(我事先不知道有多少列)。所以我必须从这个表格开始
1,a,...
2,b,...
3,c,...
像这样
3,b,...
1,c,...
2,a,...
我知道我可以用 来随机排列行shuffle
,但我需要单独随机排列每一列。我想知道是否可以使用 bash 命令组合来实现。
答案1
我创建了一个生成 bash 脚本的 python 脚本。我认为这不是最优雅的方式,但效果很好。
import csv
FILENAME = 'my_huge_csv.csv'
with open(FILENAME,'r') as f:
reader = csv.reader(f,delimiter=',')
NCOL = len(next(reader))
with open("shuffle_{}.sh".format(FILENAME),"w+") as f:
f.write("#/bin/bash \n")
f.write("/usr/bin/head -n 1 {} > final.csv \n".format(FILENAME))
for i in range(NCOL):
f.write("/usr/bin/tail -n +2 {}|/usr/bin/cut -d, -f{}|shuf > tmp_file_{}.csv &\n".format(FILENAME, i+1,i+1))
f.write("wait \n")
cut_arg = ['tmp_file_{}.csv'.format(i+1) for i in range(NCOL)]
cut_cmd = '/usr/bin/paste -d , ' + ' '.join(cut_arg) + ' >> final.csv \n'
f.write(cut_cmd)
f.write('rm '+ ' '.join(cut_arg) + ' \n')
然后我只需执行chmod +x
我的脚本并运行它即可。