我有两个可以存储大量数据的位置:/data
和/work
.
/data
是质量控制后(中间)结果移动到的文件夹。它对标准用户以只读方式安装。
/work
是写入新结果的文件夹。显然,它是可写的。
我不想将数据从 复制或链接/data
到/work
。
所以我从文件夹中运行我的snakemake/work
,并希望我的输入函数首先检查所需的文件是否存在/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()
,对吗?
谢谢,扬