2017-10-11 4 views
1

以下は、弾性検索からデータを取得し、そのデータを 'mycsvfile'というcsvファイルにエクスポートするコードです。弾性検索からエクスポートされたCVSファイルに列名を出力するにはどうしたらいいですか?

人間が読めるように列名を変更したいと思います。以下は

はコードです:

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ファイルに列名を入力できますか?

は、あなたが気にしたり喜んでない場合は、パンダを使用して試みることができる事前

+0

あなたの質問は分かりません。あなたは "DTDT"に満足しておらず、この列に別の名前を付けたいとします。 "日付"? – Wli

+0

正解、日付などの列に名前を付けるなど混乱のため残念ですが、私のコードを編集してこれを行う方法を教えてください。 – Rich

+0

私はあなたの質問を明快に編集し、それに答えました。 – Wli

答えて

-2

でいただきありがとうございます。あなたはパンダを使用した場合、あなたのソリューションは次のようになります。

import pandas as pd 

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

print(df.columns) 

も私はちょうどあなたのヘッダー状況が異なっているかいないが、あなたのインデックス列ならば、あなたはDF作成文にいくつかの調整を行う必要があるかもしれないことを追加したいです。ここには、ドキュメント link

+0

こんにちはケビン、私はちょうど今、やっていない仕事をやろうとした。私のコードで私を見せて、答えを更新できますか? – Rich

+0

これは質問に答えていません。 – Wli

+0

申し訳ありませんが、それは私の悪いです。私は質問を正しく読まなかった。 まずは[this](https:// pandas。pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html)は、パンダのデータフレーム列の名前を変更するための組み込み関数です。私は上記の持っているものに基づいてコード/中 、試してみてください。 'df.rename(インデックス= STR、列= { 'DTDT': '日付スタンプ'、 'RPLE': 'コード'})' あなたの後あなたが望む変更を加えれば、編集後に新しいcsvを得ることができます: 'pd.DataFrame.to_csv( 'newcsv')' –

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と呼ぶことができます。

+0

ありがとう、ありがとう、ありがとう、ありがとう、ありがとう、ありがとう、私はこれを行うには苦労しているオンラインの例を使用して、列名の名前を変更、これは私のコードでは例? – Rich

+0

これは、行をコピーアンドペーストして文字列を変更するために行う最も簡単な作業の1つです。私があなたのためにするなら、あなたは決して学ばないでしょう。 – Wli

+0

私は理解していますが、私は完全に同意しますが、これは私には全く新しいものなので、コピーと貼り付けと行の変更などに行きました。そして、私は今ここに拘束されており、このコーディングは私の最強のポイントではないので、あきらめてください。私はあなたが理解できることを願っています – Rich

0

どうですか?一番上に翻訳を含む辞書を定義します。このコード行を置き換え、その後

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

をして::

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

は、これをテストしませんでした正直に言うと、それはすべきで右ライン4または5またはので、あなたのESクライアントを初期化した後仕事をしなさい、そしてそれは単純で透明です。おそらく、すべてのフィールド名の翻訳が実際に提供されていることを確認したいでしょう。

それ以外の場合は、Elasticsearchで賢明なフィールド名を使用するのはどうですか?-)?

+0

こんにちは、どこに私はreadableColumnNames = {"DTDT": "日付"、[...]}?あなたは私のコードを更新して私を見せてくれますか?私は間違った場所に置いているかもしれないと思う。それらの面白いフィールドは、私が作成していないデータベースからありがとうございます。 – Rich

+0

私はその答えを明確にしました。あなたが得たエラーは何ですか?私も最初の行を少し変更しました。 [...]ビットは、私があなたが何か意味のあるものに置き換えてほしいという省略記号でした。今の例はそのまま動作しますが、すべてのフィールド名の翻訳を提供する必要があります。そうしないと、KeyErrorが返されます。 –

+0

私はあなたが提案したものを疲れました。私は、行の直後にreadableColumnNames = {"DTDT": "Date"、 "BLI": "Blub"}を入れて、あなたの行に置き換えました。 line - w = csv.DictWriter(f、[my_dict.keys()内のcolNameのための[readableColumnNames [colName])])。しかし、それは動作していません。私が得ているエラーは、 ファイル "C:/Users/.PyCharmCE2017.2/config/scratches/test1.py"、の行30、w = csv.DictWriter(f、[colularNameのcolNameの[colName]の[colName] KeyError: 'DF' – Rich

関連する問題