我希望在构建python脚本时提供基本帮助,以便将每个文件放在一个目录中并在每个文件上执行相同的任务。我有大量的蛋白质文件(FASTA格式),我正在使用的程序只允许一次搜索~500个条目。因此,我需要分别为我的116个文件运行程序,使用各种选项,如“-N”和“-t 0.800”。我搜索了帮助,我知道我必须导入操作系统等,但我从未使用过这些系统命令而丢失了。任何帮助表示赞赏!
答案 0 :(得分:2)
import subprocess
for fname in list_of_files:
r = subprocess.call(('your_command_here', '-N', '-t', '0.800', fname))
subprocess.call
将运行您的命令,等待它完成并返回退出代码(上面称为r
)。
subprocess
非常强大。您可以阅读更多相关信息here。
更新:我从问题中假设你有一个文件列表。如果不这样做,很容易获得一个列表。例如,如果您的文件都有扩展名.blah
,请使用:
from glob import glob
list_of_files = glob('*.blah')
python模块glob
接受所有通常的shell样式通配符。
答案 1 :(得分:0)
或者只是使用一些shell命令(下面假设bash)。我通常首先使用echo
来确保一切都是无害的。在示例中,文件名被回显,另外还有一个具有不同后缀的新文件名(通过剥离.blah后缀并添加.result)。这对于合理地分组和关联结果非常有用。稍后您将使用$f
上运行的内容替换echo命令,并将结果存储在$f{%.blah}.result
中。
for f in *.blah; do
echo $f ${f%.blah}.result
done
在一条线上; for f in *.c; do echo $f ${f%.blah}.result; done
。
当然可以在上面使用重定向,例如
command $f > ${f%.blah}.result
shell是一个非常自然的环境来操纵这样的文件。您可以将命令存储在shell脚本中,作为记录工作流的方法。别忘了使用
set -e
set -o pipefail
以便脚本退出错误而不是浮躁。可以捕获此类错误并运行清理代码,通知或您可能需要的任何其他内容。