内部for循环在第一次迭代后被忽略,外部for循环工作正常

时间:2020-09-14 20:01:14

标签: python python-3.x

我有一个程序需要读取一个名为PartsList.csv的CSV文件。它查看第一列,并将其与运行此代码段之前创建的字典进行比较,如果第一列与之匹配,它将从被比较的键值对中获取值,并将其用作键在字典catd{}中,并将值设置为空元组。然后,它获取空的元组,将其转换为变量holder的列表,第二列中的值附加到列表中,并转换回元组作为上述键的值。但是,我遇到的问题是,在迭代一次之后,它完全忽略了内部for循环。它生成了我需要的键,但是由于内部的for循环被忽略,因此它不会为其生成值。我不知道问题出在什么地方,所以我们将不胜感激。

以下是相关代码:

md = {}  #  This is the mentioned dictionary. The values share names with the first column of the CSV.
catd = {}
itemd = {}
holder = ()

with open('PartsList.csv') as csv_file:
    mct = 1
    act = 1
    csv_reader = csv.reader(csv_file, delimiter=',')
    print(len(md))
    for x in range(0, len(md)):
        line_count = 0
        catd[str(md["MCat{0}".format(mct)])] = ()
        for row in csv_reader:
            if md['MCat{0}'.format(mct)] == row[0]:
                holder = list(catd[str(md["MCat{0}".format(mct)])])
                holder.append(str(row[1]))
                catd[str(md['MCat{0}'.format(mct)])] = tuple(holder)
                print(catd)
                print(row[1])
            else:
                line_count += 1
        holder = ()
        mct += 1
        print(x)

print(catd)

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题已经解决,如@ 0x5453所述,使用csv_file.seek(0)将起始点重置为开始,从而停止了迭代器csv_file为空的问题。