【问题标题】:How to dynamically combine generators?如何动态组合生成器?
【发布时间】:2021-02-22 18:49:49
【问题描述】:
for submissions in itertools.zip_longest(submission_stream, submission_stream2): #want to put all streams here
            for submission in submissions:
                # processing

上面的代码适用于我已经初始化的两个流。我的目标是在 .csv 文件中组合基于用户名的流。如果有用户名,请为他们运行一个流。如果它被删除,或者添加了新用户名,请分别删除或启动该流。 流的一个例子是:

submission_stream = reddit.redditor("username").stream.submissions(skip_existing=True, pause_after=-1)

如果有人能指导我,我将不胜感激。

【问题讨论】:

    标签: iterator generator itertools reddit praw


    【解决方案1】:

    您可能必须在每次更改 .csv 文件时重新开始流式传输,尽管您可以摆脱过滤 (itertools.filterfalse) 用于删除用户名。代码草图,假设函数获取流列表,确定提交是否属于已删除的用户名,并确定文件是否因添加而更改:

    while True:
        streams = get_list_of_streams_from_csv()
        for submissions in itertools.zip_longest(streams):
            for submission in itertools.filterfalse(not_deleted, submissions):
                #processing
            if csv_changed_to_add()
                break    
    

    添加额外的流,使用.filterfalse捕获删除:

    streams = get_list_of_streams_from_csv()
    zip_iter = itertools.zip_longest(streams)
    while True:
        for submission in itertools.filterfalse(not_deleted, zip_iter):
            #processing
            if csv_changed_to_add()
                break    
        zip_iter = itertools.zip_longest(zip_iter, get_list_of_new_streams())
    

    【讨论】:

    • 感谢您的建议。有没有办法在不停止流的情况下做到这一点,因为不要错过任何东西至关重要。可能会就地附加到流列表中吗?
    • 可能有一种方法可以绑定新的流。查看更新以回答。
    猜你喜欢
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多