【问题标题】:I can not add a loop to another Python loop, please help me我无法将循环添加到另一个 Python 循环,请帮助我
【发布时间】:2021-01-16 12:20:53
【问题描述】:

我想在我拥有的 Python 循环中添加另一个循环,但我无法提出解决方案,我是 Python 新手,所以我需要帮助才能让它工作。

下面是代码的作用:

1- 从第一个 CSV 文件开始,该文件从第一行读取(有一个给定的范围可供使用)。

2- 它使用数据来运行函数。延迟几秒钟后,它会转到下一行并执行相同的相同过程以使用给定范围内的所有行。

3- 延迟几秒钟后,它会转到下一个 CSV 文件,执行与上述相同的过程(每行之间的延迟),直到使用所有 CSV 文件。

问题是,当我第二次或更多次运行该文件时,它使用相同的行。

我想再给它添加一个循环,所以当我再次运行它时,它会遍历下一个没有使用的行。

假设给定的范围是:2 行,它应该是这样工作的。

1-第一次运行,应该读取所​​有CSV文件的第1行和第2行,使用数据来运行函数。

2-第二次运行,应该读取所​​有CSV文件的第3行和第4行,使用数据运行函数。等下次运行文件时。

如果我能帮助完成这项工作,我将不胜感激, 我前段时间发布了这个问题,但我没有得到任何可行的解决方案。所以我再试一次。

这是有效的代码:

from abc.zzz  import xyz
path_id_map = [
    {'path':'file1.csv', 'id': '12345678'},
    {'path':'file2.csv', 'id': '44556677'}
    {'path':'file3.csv', 'id': '33377799'}
    {'path':'file4.csv', 'id': '66221144'}]
s_id = None

for pair in path_id_map:
    with open(pair['path'], 'r') as f:
        next(f)  # skip first header line
        for _ in range(1, 3):      
            line = next(f)
            img_url, title_1, desc_1, link_1 = map(str.strip, line.split(';'))
            zzz.func1(img_url=img_url, title_1=title_1, desc_1=desc_1, 
                      link_1=link_1, B_id=B_id=pair['id'], s_id=s_id)
            time.sleep(25)

CSV 文件内容如下所示:

img_url,desc_1 title_1,link_1
site.com/image22.jpg;someTitle;description1;site1.com
site.com/image32.jpg;someTitle;description2;site2.com
site.com/image44.jpg;someTitle;description3;site3.com

谢谢。

已编辑:

好的,我在发布的解决方案方面获得了一些帮助,但不幸的是,它不起作用,并且此人不想继续使用提供的代码来解决问题。

我又回来寻求帮助了。

【问题讨论】:

    标签: python python-3.x nested-loops


    【解决方案1】:

    你能把你的处理逻辑放在一个单独的函数中并调用它吗?

    所有文件都应该具有相同的大小,否则当 next(f) 返回为空时,您需要进行安全检查以不处理。 (无论如何这是一件好事)

    def process_n_lines_from_offset(file_set, processed, offset):
        for pair in path_id_map:
            with open(pair['path'], 'r') as f:
                next(f)  # skip first header line
    
                # skip processed lines
                x=0      
                while (x<processed):
                    next(f)
                    x += 1
    
                num_processed = 0
                for _ in range(offset):      
                    line = next(f)
                    img_url, title_1, desc_1, link_1 = map(str.strip, line.split(';'))
                    zzz.func1(img_url=img_url, title_1=title_1, desc_1=desc_1, 
                              link_1=link_1, B_id=B_id=pair['id'], s_id=s_id)
                    time.sleep(25)
    
                    num_processed += 1
        return num_processed
    
    if __name__ == '__main__':
        start = 0
        default_offset = 2
        num_processed = process_n_lines_from_offset(path_id_map, start, default_offset)
        num_processed = process_n_lines_from_offset(path_id_map, num_processed, default_offset)
    
    
    

    【讨论】:

    • 感谢您的回复,我尝试了代码,一开始我没有收到任何错误,它确实适用于第一行数据,但后来它停止了,并在此行出现错误: num_processed += 1 错误是:UnboundLocalError: local variable 'num_processed' referenced before assignment
    • 在'for _ in range(offset)'之前声明num_processed=0
    • 好的,感谢您的回复,我没有收到该错误或任何其他错误,但问题是它在第二次运行时使用相同的 CSV 文件行,我的第一次运行,它确实使用了第 1 行和第 2 行,第二次运行再次使用第 1 行和第 2 行,而不是读取第 3 行和第 4 行,我不明白这段代码如何假设记住它已使用的最后一行。跨度>
    • “跳过已处理的行”部分发生了什么?在循环中添加 x += 1,因此它只会遍历它在上次运行中已经处理过的行。
    • 感谢更正,但它仍然有同样的问题,它只是增加了另一个问题,你现在看到第一次运行,它使用所有 CSV 文件的第 1 行和第 2 行然后再次从第一个 CSV 文件开始并读取第 3 行和第 4 行并对 CSV 文件的其余部分执行相同操作,然后停止,当我第二次运行该文件时,它再次从第 1 行和第 2 行开始.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多