我有兩個位置可以存儲我的大量數據:/data
和/work
。Snakemake:不同文件位置的通用輸入函數
/data
是其中(中間)結果移到質量控制後的文件夾。它對於標準用戶是隻讀的。 /work
是寫入新結果的文件夾。顯然,它是可寫的。
我不想將/data
的數據複製或鏈接到/work
。
所以我從/work
文件夾中運行我snakemake,並希望我的輸入功能,首先要檢查,如果所需的文件中/data
存在(並返回絕對/data
路徑),如果不是在/work
返回的相對路徑目錄。
def in_func(wildcards):
file_path = apply_wildcards('{id}/{visit}/{id}_{visit}-file_name_1.txt', wildcards)
full_storage_path = os.path.join('/data', file_path)
if os.path.isfile(full_storage_path):
file_path = full_storage_path
return {'myfile': file_path}
rule do_something:
input:
unpack(in_func),
params = '{id}/{visit}/{id}_{visit}_params.txt',
這工作得很好,但我必須定義爲每個規則單獨的輸入功能,因爲文件名稱不同。是否可以編寫一個通用輸入函數,輸入文件名如{id}/{visit}/{id}_{visit}-file_name_1.txt
和通配符?
我也嘗試過類似
def in_func(file_path):
full_storage_path = os.path.join('/data', file_path)
if os.path.isfile(full_storage_path):
file_path = full_storage_path
file_path
rule do_something:
input:
myfile = in_func('{id}/{visit}/{id}_{visit}-file_name_1.txt')
params = '{id}/{visit}/{id}_{visit}_params.txt',
但是當時我沒有在in_func()
訪問通配符,難道不是嗎?
感謝, 揚
這也解決了我的問題,因爲我想將配置字典傳遞給一個單獨的文件中的輸入函數。太棒了,謝謝! – mitoRibo