【发布时间】:2021-06-04 17:04:55
【问题描述】:
我正在尝试将具有 ID 和 Status 两个属性的字典放入 CSV 文件中。将其正确放入 CSV 文件后,我想按 ID 搜索某一行,然后返回与该行 ID 相关联的状态。我遇到的问题是,在读取期间的 for 循环期间,该行是一个字典,带有“ID,Status”:“1,Off”。由于字段名称和值都在一起,我无法真正按特定 ID 过滤或获取特定状态。我希望每一行都像 'ID': 1, 'Status': 'Off' 我要么把字典放错了,要么试图用 for 循环读错。任何指针都将不胜感激,因为我对 CSV 文件还是很陌生!谢谢!
这是我目前正在使用的。它检查 Csv 文件是否存在,如果不存在,它会创建并填充它,然后尝试读取它需要的数据。否则,它只会尝试根据传入的 ID 获取所需的数据。
fields = ['ID', 'Status']
dict_data = [
{'ID': 1, 'Status': 'Off'},
{'ID': 2, 'Status': 'Off'},
{'ID': 3, 'Status': 'Off'}
]
file_exists = os.path.exists("ports.csv")
if file_exists:
with open(filename, 'r') as csvfile:
reader = csv.DictReader(csvfile, delimiter=' ')
for row in reader:
if row['ID'] == int(id):
port_status = row['Status']
else:
with open(filename, 'w', newline='') as file:
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for data in dict_data:
writer.writerow(data)
with open(filename, 'r') as csvfile:
reader = csv.DictReader(csvfile, delimiter=' ')
for row in reader:
if row['ID'] == int(id):
port_status = row['Status']
response = {
port_status
}
return jsonify(response)
【问题讨论】:
-
int(Id) 是传入的 ID,将用于搜索特定的行/记录。另外,我放在那里的 else 下的 write 块下的 reader 块,因此如果文件不存在,它会创建它,然后尝试读取它。
-
您已经说过您所追求的行为,但您没有说明您在当前实现中看到的有问题的行为。你能澄清那部分吗?这可能会得到一个更简洁的答案。
-
更新了问题,增加了涉及问题的更多细节以及我希望它做什么。