【发布时间】:2018-03-30 08:17:31
【问题描述】:
当我运行下面的查询并且["VT","NCR","N","DT","RD"], 等值中没有数据时,查询失败。
带有
的错误信息ValueError: dict contains fields not in fieldnames: ‘VT’
有没有办法说如果任何值中没有数据仍然继续运行查询以获取python中具有数据的值的数据?
例如:“TRY”、“CATCH”或“PASS”方法?
我已经为此苦苦挣扎了好几天,有人可以告诉我如何做到这一点吗?
我的代码:
from datetime import datetime
from elasticsearch import Elasticsearch
import csv
es = Elasticsearch(["9200"])
res = es.search(index="search", body=
{
"_source": ["VT","NCR","N","DT","RD"],
"query": {
"bool": {
"must": [{"range": {"VT": {
"gte": "now/d",
"lte": "now+1d/d"}}},
{"wildcard": {"user": "mike*"}}]}}},size=10)
csv_file = 'File_' + str(datetime.now().strftime('%Y_%m_%d - %H.%M.%S')) + '.csv'
header_names = { 'VT': 'Date', 'NCR': 'ExTime', 'N': 'Name', 'DT': 'Party', ' RD ': 'Period'}
with open(csv_file, 'w', newline='') as f:
header_present = False
for doc in res['hits']['hits']:
my_dict = doc['_source']
if not header_present:
w = csv.DictWriter(f, my_dict.keys())
w.writerow(header_names,)
header_present = True
w.writerow(my_dict)
【问题讨论】:
-
查找
dict.get() -
你能告诉我如何在我的代码中使用它吗?
-
错误在哪里?请显示完整的回溯
-
您从未在此处分配名为
VT或DT的变量。或者你缺少一些代码 -
@ cricket - Traceback(最近一次通话最后一次):文件“C:/Users/Rich/.PyCharmCE2017.2/config/scratches/TRY.py”,第 57 行,在
w .writerow(header_names,) # 将在正确的位置写入 DATE、TIME、... 文件“C:\Users\Rich\AppData\Local\Programs\Python\Python36-32\lib\csv.py”,第 155 行,在 writerow 返回 self.writer.writerow(self._dict_to_list(rowdict)) 文件“C:\Users\Rich\AppData\Local\Programs\Python\Python36-32\lib\csv.py”,第 151 行,在 _dict_to_list + ", ".join([repr(x) for x in wrong_fields])) ValueError: dict contains fields not in fieldnames: 'VT'
标签: python python-3.x csv dictionary elasticsearch