程序提示KeyError: 'col5',修改程序 for row in new_data: writer.writerow(["{}\t{}\t{}\t{}\t{}".format(row['col1'], row['col2'], row['col3'], row['col4'], row['col5'])])
时间: 2024-01-20 20:04:03 浏览: 95
如果提示KeyError: 'col5',说明在new_data列表中的某些字典中不存在'col5'键,而在输出结果时却尝试使用'col5'键。您可以通过在写入文件时使用字典的get方法来解决这个问题,该方法可以指定在字典中不存在某个键时使用的默认值。修改后的程序如下所示:
```
with open('image_3_2.txt', 'r') as f:
reader = csv.reader(f, delimiter='\t')
data1 = [{'col1': float(row[0]), 'col2': float(row[1]), 'col3': float(row[2]), 'col6': float(row[3])} for row in reader] # 读取txt中的数据,并将每一行作为一个字典存储在列表中
with open('image_7.txt', 'r') as f:
reader = csv.reader(f, delimiter='\t')
data2 = [{'col1': float(row[0]), 'col2': float(row[1]), 'col3': row[2]} for row in reader] # 在data2中查找每一个查询点,并在找到的行中增加第四列
for query in data1:
for row in data2:
if row['col1'] == query['col1'] and row['col2'] == query['col2']:
row['col4'] = 1
row['col5'] = query['col3'] # 在找到的行中增加第五列,赋值为image_3_2表中的第三列数据
# 将查询之后的结果构造成新的数据列表
new_data = []
for row in data2:
new_data.append({'col1': row['col1'], 'col2': row['col2'], 'col3': row['col3'], 'col4': row.get('col4', 0), 'col5': row.get('col5', 0)})
# 将新的数据列表写入新的csv文件中
with open('result_2.txt', 'w', newline='') as f:
writer = csv.writer(f)
for row in new_data:
writer.writerow(["{}\t{}\t{}\t{}\t{}".format(row['col1'], row['col2'], row['col3'], row['col4'], row.get('col5', ''))])
```
在上面的程序中,我们使用了字典的get方法来获取'col5'键对应的值。如果某个字典中不存在'col5'键,那么get方法会返回一个空字符串,从而避免了KeyError异常的出现。
阅读全文