【问题标题】:Shell Script to Run a python code with two different folders of The Same Numbered Files使用相同编号文件的两个不同文件夹运行 python 代码的 Shell 脚本
【发布时间】:2015-09-27 01:20:17
【问题描述】:

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

文件夹 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

问题是因为我有大量的两个文件夹的文件。我想找到一种方法只运行一次命令,它将自动运行从文件夹 1 到文件 001 到文件夹 2 的文件 001 和从文件夹 2 到文件 002 的文件 002,依此类推,直到两个文件夹的文件 650。如何使用 shell 脚本做到这一点?

非常感谢您提前提供的帮助,

【问题讨论】:

  • 你用的是什么外壳?是 bash 吗?

标签: python shell


【解决方案1】:

如果你有 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 次。

【讨论】:

  • 非常感谢。如果我这样做,还有一件事是可能的:file_read=dir1/${i}*.txt
  • 您不能将全局扩展的结果分配给这样的变量,但您可以使用数组:file_read=( dir1/${i}*.txt ) 然后您可以访问每个文件,例如 "${file_read[0]}""${file_read[1]}" 等.
  • 再次非常感谢。我想包含一部分代码来检查 file_read 的数量是否为 4 或必须为 4 并带有扩展名 ,txt ,对于 file_ filtr 我还想检查文件的数量为 4 和扩展名 .tsv
  • 从该评论中不清楚您的确切要求是什么,但无论如何,最好不要不断更改您的问题。如果您的原始问题得到解决,您应该接受这个答案。您应该自己解决新问题,如果遇到困难,请考虑提出另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2023-02-08
  • 1970-01-01
相关资源
最近更新 更多