【发布时间】:2020-12-22 20:24:30
【问题描述】:
已编辑
我是 Python 新手,在向嵌套循环 Python 代码添加循环时遇到问题。 在我的 Windows 7 机器上使用 Python 3.8。
代码在运行一次时执行:它从多个 CSV 文件中逐行读取,并且逐个 CSV 文件读取,并使用每一行的数据(在给定范围内)运行函数,直到没有 CSV左侧文件,每个 CSV 文件有 4 列,所有 CSV 文件各有一个标题。 每行读取之间有几秒钟的延迟。
由于该代码仅供一次性使用,当您再次运行该代码时,它会读取相同的行,而不会循环读取其他行。
所以我想向它添加另一个循环,因此每次您以某种方式运行文件时,它都会记住使用的最后一行并从下一行开始。 所以假设它已被设置为 2 行的范围:
第一次运行:使用第 1 行和第 2 行运行函数 第二次运行:使用第 3 行和第 4 行运行函数,以此类推
感谢您的帮助。
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
这是我的工作代码:
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)
**** 更新****
在寻找解决方案几天后,已发布代码(更新 2): 但它有一个大问题。
只有在使用打印功能时,它才能以我想要的方式工作,
我采用了我的函数,但是,当它第二次或更多次运行时,它不会循环到下一行,(但它只会在最后一个 CSV 文件上正确循环),
代码的作者无法更正他的代码,我不知道它有什么问题。
我检查了 CSV 文件并使用打印功能对其进行了测试,它们都可以。
也许有人帮助解决问题或完全解决问题。
【问题讨论】:
-
所以基本上你想保存一些关于 csv 文件的元数据。 IE。读取 csv 后,您将在 csv 中添加一行,然后在另一个文件中保存您离开的行,以便您可以再次从该行开始。这就是你想要的吗?
-
感谢您的回复,我打算逐行使用 CSV 文件数量中的所有数据,按给定的行范围和每天的运行次数,我不想让宝宝坐着,我不想'不知道是否需要写入数据 csv 文件,我不想弄乱数据 csv 文件,我想以某种方式将最后使用的行(索引)记录到文本文件中,并且每次文件运行时检查首先这个文本文件,对于最后一行索引号,添加一个(最后一行索引号+1)作为新的行号开始读取csv文件。
-
我不能 100% 确定你到底想要什么,所以我不能提供一个很好的代码示例,但我建议阅读这篇关于 saving and loading to a JSON file 的文章。 JSON 基本上只是 python 列表和字典。因此,您可以很容易地从文件中保存和加载字典。非常适合在这些情况下保存和加载值。
标签: python python-3.x nested-loops