对于我的文本挖掘项目(使用安然 数据集),我有这个 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 脚本在任何目录中失败,此操作也将失败。