在大型文件中独立地随机排列行

在大型文件中独立地随机排列行

我需要以这种方式生成一个非常大的 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我的脚本并运行它即可。

相关内容