相同的命令多個文件我有一個像下面這樣的蟒蛇命令:運行在Linux中
pick_closed_reference_otus.py -i **your_seq.fasta** -o **your_folder_name**
-i: input files
-o: output folder
不過,我有90個文件,我想執行相同的命令。 所有文件擴展名都是.fasta
,並且每個輸出文件應放置在特定的文件夾中。
反正我可以一次執行命令嗎?
相同的命令多個文件我有一個像下面這樣的蟒蛇命令:運行在Linux中
pick_closed_reference_otus.py -i **your_seq.fasta** -o **your_folder_name**
-i: input files
-o: output folder
不過,我有90個文件,我想執行相同的命令。 所有文件擴展名都是.fasta
,並且每個輸出文件應放置在特定的文件夾中。
反正我可以一次執行命令嗎?
在你的程序內部,我打算假設你打開了輸入文件。所以當你解析這個論點時,爲什麼不允許使用通配符?
glob module是你想要的。這將需要一個字符串,並把它變成一個列表文件的路徑,然後在你的程序,你可以遍歷他們(或者使用multiprocess並行運行它們。
下面是它如何工作的。(我假設你「再利用argparse得到命令行參數......)
import glob
import argparse
import sys
from multiprocessing import Pool, cpu_count
def your_mappable_function(filename):
print filename.upper()
#parse the command line
parser = argparse.ArgumentParser(description='Example argparse')
parser.add_argument('-i', action="store", type=str)
parser.add_argument('-o', action="store", type=str)
args = parser.parse_args()
#glob to get the files from the wild card
input_file_list = glob.glob(args.i)
#use multiprocessing pool to process files in parallel
pool = Pool(cpu_count())
#results = map(your_mappable_function, input_file_list)
results = pool.map(your_mappable_function, input_file_list)
sys.exit(0)
如果您想對這些模塊的教程,請Python Module of the Week。它涵蓋了所有的這些工具(甚至更多)。你只需更換「」「your_mappable_function」「」「帶有一個函數包裝器,它將一個文件名作爲輸入,你應該很好用,這比bash腳本更快,因爲它不必啓動和停止python進程但整個列表已被映射。
編輯: 當我回去確定代碼運行時,我添加了一個函數包裝器,並且在沒有進程池的情況下測試代碼。因爲,無論什麼時候你都會惹上一個游泳池,那麼它可以接管你的終端上的一個bug。
是的,當然有辦法做到這一點。這些都必須同時執行,還是隻是試圖保存輸入?你在什麼操作系統上?是否有一些模式將每個文件映射到其目標文件夾? – Chris
請注意,[tag:batch-file]標籤與DOS/Windows批處理文件相關,它與Unix無關;所以請重新考慮並編輯標籤... – aschipfl
[此帖](https://stackoverflow.com/a/30492833/6805091)可能會有所幫助。 – Ding