在Linux系统下批量处理python的压缩数据(.npz)

本文介绍了如何使用Linux批处理脚本自动处理大量data_index.npz文件,通过检查output文件的存在避免重复处理,以及利用并行处理加速执行。最后,作者命名此脚本为反复自省的多线自我PUA脚本。
摘要由CSDN通过智能技术生成

最近开始学习用Linux系统工作。不得不说,Linux用来做批处理真的很方便。

用数据处理文件process.py处理单个data_index.npz文件的方式,处理后生成.output 文件

python process.py data_index

当文件多起来的时候,用手在命令行里挨个敲显然会让人非常痛苦。所以要批处理data_index.npz。这一步的操作不难,只需要列出文件夹中以.npz结尾的文件,再用循环处理即可:

#!/bash/bin
. /your_anaconda_installation_path/anaconda3/etc/profile.d/conda.sh
conda activate environment # where you run process.py

for file in *.npz; do
    data_index=${file&.npz}
    echo "Execution: python process.py $data_index"
    python process.py $data_index
done

这样还不够,每次运行的时候,不管你的数据有没有被处理过,它都要重新处理一遍,很浪费时间。所以我想在处理之前检查一遍文件夹,避免已经处理过而且存在相应的.output的某个data_index.npz被重复处理。怎么办呢?只需要加上一个简单的判断即可:

我们知道,每次处理之后,都会产生一个对应的data_index.output文件。那么,只要检查这个output文件存不存在,不就能挑出那些没被处理过的文件进行处理了吗?

所以代码变成了这样

#!/bash/bin
. /your_anaconda_installation_path/anaconda3/etc/profile.d/conda.sh
conda activate environment # where you run process.py

mkdir processed

for file in *.npz; do
    data_index=${file&.npz}
    if [ -f "${number}.output" ]; then
        # if the .npz file has been processed
        echo "execution: mv ${number}.npz processed/"
        mv "${number}.npz" "processed/"
    else
        # Perform operation B if .output file does not exist
	    echo "execution: python process.py $number"
	    python process.py "$number"
done

另外,还可以在代码里加上并行命令,让处理过程更快结束

这时就没有必要在循环里处理命令了,循环部分改成:

for file in *.npz; do
    data_index=${file&.npz}
    if [ -f "${number}.output" ]; then
        # if the .npz file has been processed
        echo "execution: mv ${number}.npz processed/"
        mv "${number}.npz" "processed/"
done

然后加上并行指令:

NUM_JOBS=4
find . -maxdepth 1 -type f -name ".npz" | sed "find a way to move suffix"| parallel --ungroup -j $NUM_JOBS 'echo "Execution: python process.py data_index"; python process.py data_index'

这样,省心又省事还快的批处理代码就写好啦!

给它取个名字吧,就叫“反复自省的多线自我PUA脚本”!

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值