gpt4 book ai didi

python - Snakemake:从字符串手动创建通配符

转载 作者:行者123 更新时间:2023-12-02 18:14:48 28 4
gpt4 key购买 nike

假设我有两个字符串,一个模板和目标字符串。

模板字符串:“param1~{wildcard1}/param2~{wildcard2}_param3~{wildcard3}”

目标字符串:“param1~1.1/param2~a_b_c_param3~345”

我想创建一个接受模板字符串和目标字符串作为参数的函数。该函数返回一个通配符对象(或字典,或一些可以保存键值对的数据结构),其中键是通配符名称(即通配符1),值是目标字符串中通配符的值(即1.1)

这是一个小例子:

def extract_wildcards(template, target):
... (implementation) ...
return wildcards

用法:

wildcards = extract_wildcards("param1~{wildcard1}/param2~{wildcard2}_param3~{wildcard3}",
"param1~1.1/param2~a_b_c_param3~345")
print(wildcards.wildcard1)
>"1.1"
print(wildcards.wildcard2)
>"a_b_c"
print(wildcards.wildcard3)
>"345"

请注意,类型转换不是必需的!所有值都应该是字符串。模板中的通配符名称将始终被 {} 包围。对于目标字符串,您可以假设始终只有 1 种方法来提取通配符值(每个通配符可以是什么,没有歧义)

最佳答案

有一个有用的库,parse ,可以通过pip安装:

pip install parse

这是一个可重现的示例:

template = "param1~{wildcard1}/param2~{wildcard2}_param3~{wildcard3}"
target = "param1~1.1/param2~a_b_c_param3~345"

# pip install parse
from parse import parse

wildcards = parse(template, target).named
print(wildcards)
# {'wildcard1': '1.1', 'wildcard2': 'a_b_c', 'wildcard3': '345'}

在此答案的早期版本中,我认为这是 snakemake 内部使用的内容,但这是错误的。事实上,还定义了另一个parse函数here ,这可能会导致命名冲突(如果使用外部 parse 库)。避免该问题的一种方法是使用别名导入外部模块,例如parse_external:

from parse import parse as parse_external

关于python - Snakemake:从字符串手动创建通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71740945/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com