从elastic search导出的CSV文件中的可读列名?

2024-09-24 04:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是从弹性搜索中获取一些数据并将这些数据导出到名为“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

如您所见,列名与查询中的列名相同,我希望在生成文件时为它们提供可读的名称。例如,我想用日期代替DTDT,TRDT是时间等

有人可以显示和修复我的代码为我输入列名到CSV文件?你知道吗

先谢谢你


Tags: 文件csv数据代码importesmyelasticsearch
2条回答

一种简单的方法是将dict用作转换表,并将其作为行写入,而不是写入实际的DictWriter头:

header_names = { 'DTDT': 'DATE', 'TRDT': 'TIME', ...}

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.writerow(header_names)  # will write DATE, TIME, ... in correct place
            header_present = True


        w.writerow(my_dict)

编辑:对不起,是我背后写的那句话。正确的、经过测试的版本如下。你知道吗

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)

是什么让你的脚本写出来的标题是我的_听写键()传递给听写器。用标签列表替换这些键,编写者应该正确地编写。你知道吗

相关问题 更多 >