我有两个位置可以存储我的大量数据:/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