python没有遍历数组的其余部分

时间:2017-04-02 22:42:02

标签: python

我有几个相互嵌套的循环,我会发布相关代码然后解释:

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 = '|')

1 个答案:

答案 0 :(得分:2)

您的问题与多次迭代同一个csv.reader对象有关。一个reader对象是一个迭代器,所以在你迭代一次之后,你将不会再尝试迭代更多的结果,因为它已经用尽了。您需要每次通过循环重新创建您的阅读器,或重新组织您的代码,以便您不需要多次迭代它(例如,使其成为外部循环而不是内部循环)。

您的代码还有许多其他问题,您可能也想要更改这些问题。例如,您反复使用for i in something,然后立即将其他名称绑定到i。您应该将其他名称直接放入循环中(例如for CNT in range(...))。我还建议遵循一个更好的变量名称样式,例如lower_case_with_underscores表示正常变量,保留ALL_CAPITALS表示常量(CapitalizedNames对于类的名称也是常规名称,但你不要'似乎有任何一种)。