如何打印从弹性搜索导出的CVS文件中的列名?

时间:2017-10-11 13:37:03

标签: python python-3.x csv elasticsearch python-3.6

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

正如您所看到的,列名与查询中的列名相同,我希望在生成文件时为它们提供可读的名称。

有人可以显示并修复我的代码,让我在CSV文件中输入列名吗?

提前谢谢

3 个答案:

答案 0 :(得分:0)

您想要的是重命名字典键To do that, you can for example pop it to a new column name. DTDT 更改为日期的示例。

my_dict['date'] = my_dict.pop('DTDT')

我认为您可以弄清楚如何重命名其他列。之后,您可以在for循环中调用w.writerow

答案 1 :(得分:0)

怎么样?在顶部定义带有翻译的字典,例如在初始化您的客户后,在第4或第5行左右:

readableColumnNames = {"DTDT" : "Date", "BLI" : "Blub"}

然后替换这行代码:

w = csv.DictWriter(f, [readableColumnNames[colName] for colName in my_dict.keys()])

说实话,没有测试过这个,但是它应该完成这项工作,并且它简单透明。您可能希望确保实际提供所有字段名称的翻译。

或者,如何在Elasticsearch中使用合理的字段名称:-)?

答案 2 :(得分:-2)

如果您不介意或愿意,可以尝试使用熊猫。如果您使用了熊猫,那么您的解决方案就是:

import pandas as pd

df = pd.DataFrame.read_csv('mycsvfile.csv')

print(df.columns)

我还想补充一点,如果您的标题情况不同或索引列不存在,您可能需要对df创建语句进行一些调整。这是文档link