以下是从 Elasticsearch 中获取一些数据并将其导出到名为“mycsvfile”的csv文件的代码。
我想更改列名,以便人类可以读取。
下面是代码:
from elasticsearch import Elasticsearch
import csv
es = Elasticsearch(["9200"])
# Replace the following Query with your own Elastic Search Query
res = es.search(index="search", body=
{
"_source": ["DTDT", "TRDT", "SPLE", "RPLE"],
"query": {
"bool": {
"should": [
{"wildcard": {"CN": "TEST1"}}
]
}
}
}, size=10)
with open('mycsvfile.csv', 'w') as f: # Just use 'w' mode in 3.x
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.writeheader()
header_present = True
w.writerow(my_dict)
当我运行上述查询时,CSV文件数据如下所示:
DTDT TRDT SPLE SACL RPLE
20170512 12/05/2017 15:39 1001 0 0
20170512 12/05/2017 15:39 1001 0 0
20170908 08/09/2017 02:42 1001 0 0
20170908 08/09/2017 06:30 1001 0 0
如您所见,列名与查询中的列名相同,并且我想在生成文件时为它们提供可读的名称。例如,我想要的不是DDT,而是DATE,而TRDT是TIME等。
有人可以替我显示并修改我的代码,以便将列名称输入CSV文件吗?
先感谢您
最佳答案
编辑:对不起,那条线是我写的。正确的,经过测试的版本如下。
with open('mycsvfile.csv', 'w') as f: # Just use 'w' mode in 3.x
header_present = False
for doc in res['hits']['hits']:
my_dict = doc['_source']
if not header_present:
fieldnames = ['name', 'name', 'name']
w = csv.DictWriter(f, fieldnames=fieldnames)
w.writeheader()
header_present = True
w.writerow(my_dict)
使脚本写出 header 的原因是传递给DictWriter的my_dict.keys()。用标签列表替换这些键,编写者应该正确地编写它。
关于python - 从 Elasticsearch 导出的CSV文件中的可读列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692763/