![在多个目录和多个文件上运行 Python 脚本](https://linux22.com/image/41661/%E5%9C%A8%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95%E5%92%8C%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8A%E8%BF%90%E8%A1%8C%20Python%20%E8%84%9A%E6%9C%AC.png)
这是我的命令行python
:
python script.py -a .faa -n .fna
我有一个包含多个目录的目录。在这多个目录中,可能有 1 个或多个文件夹。
在这 1 个或多个文件夹中,我需要在.faa
和.fna
文件上运行我的 python 脚本。
我该怎么做呢?
示例树:
Staph1 ----> [CO1, CO2] ----> [.fna, .faa] from CO1, [.fna, .faa] from CO2
Staph2 ----> [CO6] ----> [.fna, .faa] from CO6
我的 Python 脚本将使用文件夹内的输入.fna
和输出。.faa
文件夹和目录也是同义词。
答案1
我认为这应该有帮助:
该脚本将使用os.walk
,如 @1_CR 建议,并且当和文件同时存在时(即在同一目录中),将使用hello_world.py
两个文件的路径调用脚本。fna
faa
import glob, os
def scanfolder():
for path, dirs, files in os.walk('/home/shadowe/test1/test1/'):
flag_faa = 0
flag_fna = 0
for f in files:
if f.endswith('.faa'):
flag_faa = 1
faa_file_path = os.path.join(path,f)
if f.endswith('.fna'):
flag_fna = 1
fna_file_path = os.path.join(path,f)
if flag_faa == 1 and flag_fna == 1:
print "Calling script"
os.system("python hello_world.py" + " -a "+ faa_file_path + " -b " + fna_file_path)
flag_faa = 0
flag_fna = 0
scanfolder()
第二个脚本:
import sys
print "Hello World"
print "This argument passing qualifies " + sys.argv[1] + " " + sys.argv[2] + " " + sys.argv[3] + " " + sys.argv[4]
输出:
$ python test.py
Calling script
Hello World
This argument passing qualifies -a /home/shadowe/test1/test1/test2/test3/two.faa -b /home/shadowe/test1/test1/test2/test3/two.fna
Calling script
Hello World
This argument passing qualifies -a /home/shadowe/test1/test1/test6/test7/four.faa -b /home/shadowe/test1/test1/test6/test7/five.fna