带内部输入的Ruffus管道

2024-07-08 09:25:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Ruffus包为Python创建一个管道,我正在努力解决它最简单的概念。两个任务应该一个接一个地执行。第二个任务取决于第一个任务的输出。在Ruffus文档中,一切都是为从外部文件导入/导出而设计的。我想处理像字典这样的内部数据类型。你知道吗

问题是@follows不接受输入,@transform不接受dict。我错过什么了吗?你知道吗

def task1():
    # generate dict
    properties = {'status': 'original'}
    return properties

@follows(task1)
def task2(properties):
    # update dict
    properties['status'] = 'updated'
    return properties

最终,管道应该在一个类中组合一组函数,这些函数可以随时更新类对象。你知道吗


Tags: 文件函数文档概念return字典管道def
1条回答
网友
1楼 · 发布于 2024-07-08 09:25:32

只有在有输入/输出文件时才应该使用Ruffus decorators。例如,如果task1生成file1.txt,而这是task2的输入,它生成file2.txt,则可以按如下方式编写管道:

@originate('file1.txt')
def task1(output):
    with open(output,'w') as out_file:
        # write stuff to out_file

@follows(task1)
@transform(task1, suffix('1.txt'),'2.txt')
def task2(input_,output):
    with open(input_) as in_file, open(output,'w') as out_file:
        # read stuff from in_file and write stuff to out_file

如果只想将字典作为输入,则不需要Ruffus,只需对代码进行适当排序(因为它将按顺序运行)或在task2中调用task1

def task1():
    properties = {'status': 'original'}
    return properties

def task2():
    properties = task1()
    properties['status'] = 'updated'
    return properties

相关问题 更多 >

    热门问题