用于运行带有相同编号文件的两个不同文件夹的python代码的Shell脚本

时间:2015-07-08 21:46:46

标签: python shell

我有两个文件夹,每个文件夹包含具有相同编号系统的文件,这些文件是文件名的一部分。 例如,

文件夹1有:

  001file_read.txt, 002file_read.txt, until 650file_read.txt

文件夹2有:

  001filtr.tsv, 002filtr.tsv, until 650filtr.tsv

我想使用shell脚本运行python代码,它基本上运行如下:

 python my_python_prog.py 001file_read.txt  001filtr.tsv

问题是因为我有两个文件夹的大量文件。我想找到一种方法只运行一次命令,它会自动将file001从folder1运行到file001到folder2,file002从folder1运行到file002从folder2,依此类推,直到两个文件夹的file650。我怎么能用shell脚本呢?

非常感谢您的帮助,

1 个答案:

答案 0 :(得分:2)

如果你有bash,你可以使用这样的脚本:

#!/bin/bash 

for i in {001..650}; do
    file_read=dir1/${i}file_read.txt
    file_filtr=dir2/${i}filtr.tsv
    if [[ -f $file_read ]] && [[ -f $file_filtr ]]; then
        python my_python_prog.py "$file_read" "$file_filtr"
    fi
done

循环遍历从000650的所有数字,检查两个文件是否都存在并执行python命令。

如果你没有bash,你可以通过做一些改变来实现同样的目的:

#!/bin/sh

while (( ++i <= 650 )); do
    n=$(printf '%03d' "$i")
    file_read=dir1/${n}file_read.txt
    file_filtr=dir2/${n}filtr.tsv
    if [ -f "$file_read" ] && [ -f "$file_filtr" ]; then
        python my_python_prog.py "$file_read" "$file_filtr"
    fi
done

或者,您可以修改python脚本,在其中执行循环,并使用os.path.isfile()验证两个文件是否存在。这种方法的优点是你不会调用你的脚本650次。