首页 > 解决方案 > 第一次迭代后内部 for 循环被忽略,外部 for 循环工作得很好

问题描述

我有一个程序需要读取一个名为 .csv 的 CSV 文件PartsList.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)

感谢您的帮助!

标签: pythonpython-3.x

解决方案


正如@0x5453 提到的,问题已经解决,使用csv_file.seek(0)将起点重置为起点,停止迭代器csv_file为空的问题。


推荐阅读