当前位置: 首页 > 知识库问答 >
问题:

将具有多个函数的python脚本转换为SnakeMake工作流

王兴庆
2023-03-14

我有一个输入文件,每行对应一个序列,我需要对每个序列进行多次检查(已经使用python脚本和多个函数进行了检查)。其中一些检查(函数)彼此不依赖,可以同时运行。所以我想用蛇毒。

问题是,大多数示例使用这么多输入文件,我只有一个文件,但需要在文件的每一行上运行不同的shell。有人提出什么想法/例子吗?

我的第二个问题是,我的python脚本中的一些函数不打印文件,而是返回一些东西。虽然我见过大多数蛇一样的例子都有一个输出(这是一个文件)。如何处理Snakemake工作流中的这些功能?我的意思是如何在不同的函数/规则/...等等之间传递参数?我希望我问的很清楚。谢啦

我在网上浏览了教程和一些例子

我的python脚本看起来像:

def功能1(arg1、arg2):。。。返回列表

def功能2(arg1、arg2):。。。。[写一个文件]

def功能3(arg1、arg2):。。。打印(‘废话’)

def main():函数1(A, B)函数2(A, B)函数3(A, B)

如果name==main:main()

我没有错误消息。但我不知道如何将我的脚本和这么多函数转换为Snakemake工作流。

共有1个答案

彭正谊
2023-03-14

您可以为您的函数定义单独的snakemake规则,前提是您提供了一个创建文件的系统(可以简单地将函数的结果打印到文件中)。实际上,snakemake根据它必须生成的文件来决定运行哪个规则。

这样,相互不依赖的规则将能够并行运行。

from contextlib import redirect_stdout

def function1(arg1, arg2):
    # ...

def function2(arg1, arg2):
    # ...

def function3(arg1, arg2):
    # ...

A = ...
B = ...

rule all:
    input:
        "function1_result.txt",
        "function2_result.txt"
        "function3_result.txt"

rule run_function1:
    output:
        "function1_result.txt",
    run:
        l = function1(A, B)
        with open(input[0]) as fh:
            print(*l, sep="\n", file=fh)

rule run_function2:
    output:
        "function2_result.txt",
    run:
        # Assuming this writes "function2_result.txt":
        function2(A, B)

rule run_function3:
    output:
        "function3_result.txt",
    run:
        with open(input[0]) as fh:
            # see https://stackoverflow.com/a/55833804/1878788
            with redirect_stdout(fh):
                function3(A, B)

请注意,这不会并行处理输入文件的行。

 类似资料:
  • 问题内容: 我在文件夹和tmx文件中有3个python脚本和许多图像,我想将其作为单个.exe。我无法找到如何将多个python脚本和文件夹转换为单个exe。我只能为单个python脚本找到cxfreeze和类似的东西。请帮忙。 提前致谢。 问题答案: 在cxfreeze中创建一个setup.py文件。您必须在cxfreeze可执行文件中将多个pyhton文件作为列表传递。引用此线程- 适用于两个

  • 我有2个对象ExpertJpa到ExpertDto的现有映射,需要另一个参数来过滤ExpertJpa。这个映射工作正常,现在我尝试将ExpertJpa列表转换为ExpertDto列表,我添加了第二个参数。 在构建时,我收到错误消息,即List是一个接口,不能是实例…… 错误:(53,18) java:返回类型java.util.List是一个抽象类或接口。提供非抽象/非接口结果类型或工厂方法。

  • 问题内容: 我有一个用于MySQL数据库的初始化脚本,但出于测试目的,我不想使用H2数据库。有人知道如何转换文件,或者至少有语法差异列表吗?谢谢。 问题答案: 有许多数据库工具可帮助将数据从一个数据库迁移到另一个数据库,例如: 飞路 SQuirreL DB复制插件

  • 问题内容: 编辑: 是否使用不在此问题的范围内。考虑使用PDO。 需要采取什么步骤将脚本从使用不赞成使用的功能转换为? 使用代替时,是否需要采取其他不同的措施? 这是使用函数的基本脚本: 问题答案: 注意: 从转换到可能不是最佳的。如果您准备将所有代码转换为OOP,请考虑使用 PDO 。 这是很有诱惑力的尝试更换的所有实例与祈祷它的工作原理。您会很亲密,但不是很准。 连接到数据库: 幸运的是,该方

  • 我有30张单独的工作表,需要合并成一张有多个选项卡的工作表。我可以使用下面的脚本来完成这项工作,但每次都会创建一个新的工作表。当30张单独的工作表中的一张或全部更新时,我只希望这个脚本更新或重写以前创建的“主工作表”。 我正在寻找一个表,其中包含从每个地区的标签。这将允许我与单独更新的所有信息共享一个主控表。

  • 问题内容: 我知道有一些工具可以验证您的Python代码是否符合PEP8,例如,既有在线服务又有python模块。 但是,我找不到可以 将 我的Python文件转换为自包含的PEP8有效Python文件的服务或模块。有人知道是否有吗? 我认为这是可行的,因为PEP8完全是关于代码的外观,对吧? 问题答案: 不幸的是,“ pep8风暴”(整个项目)有几个负面影响: 很多合并冲突 打破git的责备 使