如何通过运行一个终端代码来运行多个 Python 文件?

如何通过运行一个终端代码来运行多个 Python 文件?

对于我的文本挖掘项目(使用安然 数据集),我有这个 Python 脚本:

from glob import glob
import fileinput
with open('/media/output/inbox.txt', 'w') as out:
for line in fileinput.input(glob('*.')):
    if 'Subject:' in line:
        out.write(line)

在 1000 多个文件夹中,具有像这样的一步深度文件夹结构,

-folder
  --folder 2.

通过使用此终端命令,它完美地运行。

find allen-p fischer-m kitchen-l phanis-s smith-m arnold-j forney-j kuykendall-t pimenov-v solberg-g ,,,,,,,,,,, zufferli-j -maxdepth 1 -exec cp file.py {} \;

通过查看 Python 脚本,我尝试从文件中提取特定行并将其粘贴到另一个文件。

然后我意识到我需要逐个运行这些脚本。

我如何才能自动逐个运行每个脚本并运行所有文件夹结构?

我正在寻找一些像上面那样的终端代码或 Python 脚本。

答案1

您不需要将脚本复制到每个目录。只需修改命令find即可运行它:

find allen-p ... zufferli-j -maxdepth 1 -type d -execdir python "$PWD"/file.py \;

-execdir选项在每个目录内运行命令。我们使用$PWD给出脚本的完整路径,这样更改工作目录不会影响命令查找脚本的位置。

但是,既然您已经复制了它,那么您可以跳过$PWD

find allen-p ... zufferli-j -maxdepth 1 -type d -execdir python file.py \;

笔记

你没有在find命令中提供类型检查(就像我上面所做的那样-type d)。如果没有它,每一个这些目录中的文件现在已被覆盖file.py。您只想复制到(并在其中运行)目录,因此您应该-type d在其中添加。

答案2

您还可以编写一个循环,进入每个目录并在返回之前运行脚本:

for dir in allen-p fischer-m ... solberg-g; do
    cd "$d" && /path/to/python/script.py && ../
done

请注意,如果 python 脚本在任何目录中失败,此操作也将失败。

相关内容