Python, 如何使嵌套循环在函数中起作用?
Python, How to make a nested loop works in a function?
我有一个使用循环的工作函数,它工作正常,在我的示例代码中,有 4 个 CSV 文件,但它可以转到 40 个或更多 CSV 文件。
- 此代码从第一个 CSV 文件 (file1.csv) 读取,从一个范围循环(在本例中从第 0 行到第 3 行开始),
- 使用这些行中的数据(一次一个)到 运行 函数,
- 然后它转到第二个 CSV 文件并使用相同范围 (0-3) 的数据,直到最后一个 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)
我有一个使用循环的工作函数,它工作正常,在我的示例代码中,有 4 个 CSV 文件,但它可以转到 40 个或更多 CSV 文件。
- 此代码从第一个 CSV 文件 (file1.csv) 读取,从一个范围循环(在本例中从第 0 行到第 3 行开始),
- 使用这些行中的数据(一次一个)到 运行 函数,
- 然后它转到第二个 CSV 文件并使用相同范围 (0-3) 的数据,直到最后一个 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)