我有几个相互嵌套的循环,我会发布相关代码然后解释:
ANN = ['array','of','fourteen','people']
COUNT = 14
for i in range(COUNT):
CNT = i
print CNT
for i in ANN:
ANNOTATOR = i
for row in PRGREADER:
print row
if (ANNOTATOR in row[2]) and (WEEK in row[3]):
if PRGFILE.strip('.csv') not in ANNODAT[CNT][0]:
ANNODAT[CNT][0].append(PRGFILE.strip('.csv'))
这段代码应该读取一个csv文件(读入PRGREADER),检查并查看ANN的当前值和周数是否在该行上。如果是,则采用文件名并将其存储在数组中。
我已经将其缩小到实现它迭代COUNT,它迭代通过ANN,但之后它只在第一次迭代通过ANN而没有其他人执行此代码的其余部分。为什么在ANN的第一次迭代后没有执行其余的嵌套代码?
编辑添加PRGREADER的创建
for filename in os.listdir('progress/'):
if filename.endswith('.csv'):
PRGFILES.append(filename)
for i in PRGFILES:
PRGFILE = i
with open('./progress/' + PRGFILE,'rb') as PROGRESS:
PROGRESS = [element.upper() for element in PROGRESS]
PRGREADER = csv.reader(PROGRESS, delimiter = ',', quotechar = '|')
答案 0 :(得分:2)
您的问题与多次迭代同一个csv.reader
对象有关。一个reader
对象是一个迭代器,所以在你迭代一次之后,你将不会再尝试迭代更多的结果,因为它已经用尽了。您需要每次通过循环重新创建您的阅读器,或重新组织您的代码,以便您不需要多次迭代它(例如,使其成为外部循环而不是内部循环)。
您的代码还有许多其他问题,您可能也想要更改这些问题。例如,您反复使用for i in something
,然后立即将其他名称绑定到i
。您应该将其他名称直接放入循环中(例如for CNT in range(...)
)。我还建议遵循一个更好的变量名称样式,例如lower_case_with_underscores
表示正常变量,保留ALL_CAPITALS
表示常量(CapitalizedNames
对于类的名称也是常规名称,但你不要'似乎有任何一种)。