问题描述
此处是新手Python用户。我正在尝试一个程序,将使用dictReader从.csv文件接收的字典行与我自己的字典数据进行比较。我的程序将从csv文件中获取每一行,并将其与数据的每一列进行比较以找到匹配项。找到所有数据匹配的行后,它将打印出该行的键,即“名称”。
我的问题是,我找不到一种方法来告诉程序执行该操作。我在嵌套的for循环内的if语句中插入了一个中断,因此,如果某列不匹配,则它立即移至下一个“名称”行。如果我将print()指向嵌套的for循环的末尾,则它将多次打印该列,但是会多次匹配该列。如果所有列都匹配,我只想将名称打印一次...(例如,如果它到达for循环的末尾)
with open(f"databases/{argv[1]}","r") as dna_database:
data = csv.DictReader(dna_database)
for row in data:
for column in dna:
if dna[column] != int(row[column]):
break
print(row["name"])
dna_database.close()
解决方法
使用else
循环的for
子句:
with open(f"databases/{argv[1]}","r") as dna_database:
data = csv.DictReader(dna_database)
for row in data:
for column in dna:
if dna[column] != int(row[column]):
break
else:
print(row["name"])
当else
循环未不提前退出(即“如果它到达for循环的末尾”)时,将触发for
子句。
,The
for
-statement当项目用尽[..]时,将执行
else
子句中的套件(如果存在),并且循环终止。
您使用上下文管理器,因此无需调用close()
with open(f"databases/{argv[1]}","r") as dna_database:
data = csv.DictReader(dna_database)
for row in data:
found = True
for column in dna:
if dna[column] != int(row[column]):
found = False
break
if found:
print(row["name"])
break # stop: for row