Python, 如何使嵌套循环在函数中起作用?

Python, How to make a nested loop works in a function?

我有一个使用循环的工作函数,它工作正常,在我的示例代码中,有 4 个 CSV 文件,但它可以转到 40 个或更多 CSV 文件。

我想运行这个Python文件按计划(每天一次、两次或更多次), 所以我想添加另一个循环,当下一次 Python 文件 运行s 时,它从停止的地方读取 CSV 文件。 (本例中的第 3 行到第 6 行)对于所有 CSV 文件,下一次它再次 运行s,它从它停止的地方开始(本例中的第 6 t 9 行)等等所有 CSV 文件.,当然这个范围是一个例子,

我不确定这是否可行,我不知道该怎么做,感谢您的帮助。

这是我的代码:

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:
        for i in range(0, 3):      
            zzz.func1(id_1=f.readline().rstrip(), B_id=pair['id'], s_id=s_id)
            time.sleep(25)

您可以为 运行 您的代码创建一个函数,并使用变量来设置它必须解析的范围。 每次调用该函数时,您都会更新变量(在您的示例中添加 +3)并将它们传递给函数。 您可以使用更复杂的规则更新这些变量,如添加到一定数量,然后重新开始为 0,等等。

  • 如果你想记住程序的执行状态,你需要将这些变量中的任何一个存储在某个地方。在下面的示例中,我使用了一个纯文本文件,但它可以是数据库或任何其他形式的持久存储。

  • 为了让事情更容易改变和适应,你应该分解成完成一项任务的小功能。

def read_range(pair, start_line, end_line):
    with open(pair['path'], 'r') as f:
        line_counter = 0
        for line in f:            
            if line_counter >= start_line and line_counter < end_line:
                zzz.func1(id_1=f.readline().rstrip(), B_id=pair['id'], s_id=s_id)
                time.sleep(25)
            elif line_counter >= end_line:
                break
            line_counter = line_counter + 1

def read_start_number():
    try:
        lines = open("save.txt", 'r').readlines()
    except FileNotFoundError:
        write_start_number(0)
        lines = read_start_number()
    return lines[0]
    

def write_start_number(line_number):
    with open('save.txt', 'w') as f:
        f.write(str(line_number))
        
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

start_number = int(read_start_number())
print(start_number)
for pair in path_id_map:
    read_range(pair, start_number, start_number + 3)
write_start_number(start_number+3)