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

2024-04-25 04:15:05 发布

您现在位置: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文件数据如下所示:

^{pr2}$

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

有人能给我显示并修改我的代码,让我在CSV文件中输入列名吗?在

提前谢谢你


Tags: 文件csv数据代码importesmywith
3条回答

如果你不介意或者愿意的话,你可以尝试使用熊猫。如果你使用熊猫,你的解决方案是:

import pandas as pd

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

print(df.columns)

另外,我只想补充一下,如果您的头情况不同或者您的索引列不在那里,您可能需要对df creation语句进行一些调整。以下是文档link

那怎么样?在第5行或第5行初始化客户机后定义翻译,例如:

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

然后替换这行代码:

^{pr2}$

说实话,没有测试这个,但它应该能完成任务,而且简单透明。您可能需要确保所有字段名的翻译都是实际提供的。在

或者,在Elasticsearch中使用有意义的字段名如何:-)?在

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

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

我想你可以想出如何重命名其他专栏。之后,您可以在for循环中调用w.writerow。在

相关问题 更多 >