我有嵌套的DictReader迭代器,但是我注意到for build in building
在for row in location
中的每次迭代后都没有重置,这导致它只在第一次迭代之后将其与生成中的最后一个对象进行比较。为什么不复位?在
import csv
building = csv.DictReader(open('tblBuilding.csv', newline=''), delimiter=',', quotechar='"')
purpose = csv.DictReader(open('tblPurpose.csv', newline=''), delimiter=',', quotechar='"')
room = csv.DictReader(open('tblRoom.csv', newline=''), delimiter=',', quotechar='"')
location = csv.DictReader(open('Locations.csv', newline=''), delimiter=',', quotechar='"')
data, i = {}, 0
for row in location:
result = {}
for build in building:
if row['Build'] == build['BuildingName']:
result['BuildingID'] = build['BuildingID']
它们不会重置,因为基础文件对象不会重置。您可以再次将文件倒带到开始处,但要考虑到第一行是标题行,所以也跳过它:
但是首先,您不应该在嵌套的CSV文件上循环。在处理位置之前,将建筑信息存储在字典中:
^{pr2}$buildings
字典现在将BuildingName
映射到BuildingID
值。现在,您可以在O(1)恒定时间内查找建筑物,而不必在每个位置的所有CSV行上循环:相关问题 更多 >
编程相关推荐