0: -6ren">
gpt4 book ai didi

通过 CSV 进行 Python 迭代

转载 作者:行者123 更新时间:2023-12-01 07:11:01 27 4
gpt4 key购买 nike

for i, line in enumerate(lines):
testIDLines.append(line)
if line.find("TEXT") > 0:
for row in csvFile:
dosomething
if dosomething = True:
break
else:
continue

我在这段代码中遇到了一个小问题 - 第一次迭代工作得很好,但是当我再次进入第二个 for 循环时,for row in csvFile 不是从 csvFile 的开头开始,但上次离开循环的位置。

csvFile 变量是使用 csvFile = csv.DictReader(open("Filename.csv")) 创建的字典

有没有办法将 csvFile 变量重置为从第一行开始?或者这种情况怎么可能发生,当我在 csvFile 中创建 for row

时,这种情况下的 csvFile 变量会被触及

最佳答案

csv.DictReader 使用根据传入的文件描述符创建的内部迭代器。后者又使用文件迭代器来迭代数据。正如 @Maciej 所说 - 您需要使用 seek 重置文件位置。

为此,您需要先保存文件描述符的值,然后再将其传递给 DictReader。顺便说一下,你那里有泄漏,因为关闭不会被调用。

with open("Filename.csv") as csvFile:
csvDict = csv.DictReader(csvFile)
...
for i, line in enumerate(lines):
testIDLines.append(line)
if line.find("TEXT") > 0:
for row in csvDict:
dosomething
if dosomething = True:
break
else:
continue
csvFile.seek(0) # reset iteration

但是如果你的文件不大,最好在字典中迭代之前缓存数据,然后在计算中使用它,这样就不会有任何冗余的 IO 调用。

关于通过 CSV 进行 Python 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58219540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com