2017-11-13 12 views
1

CSVの2つの列で 'NCR'のデータを使用しようとしています。しかし、それはお互いを無効にし、「YesterdayTime」という列のデータのみを提示しました。2つの列のデータの収集

’ExTime’‘YesterdayTime’の両方の列で 'NCR'のデータを使用する方法はありますか?

マイコード

from datetime import datetime 
from elasticsearch import Elasticsearch 
import csv 

es = Elasticsearch(["9200"]) 

res = es.search(index="search", body= 
       { 
        "_source": ["VT","NCR","N","DT","RD"], 
        "query": { 

         "bool": { 
          "must": [{"range": {"VT": { 
              "gte": "now/d", 
              "lte": "now+1d/d"}}}, 

           {"wildcard": {"user": "mike*"}}, 
           {"wildcard": {"user": "jane*"}}, 
           {"wildcard": {"user": "kate*"}}, 
           {"wildcard": {"user": "dave*"}}, 
           {"wildcard": {"user": "rich*"}} 

]}}},size=10) 


csv_file = 'File_' + str(datetime.now().strftime('%Y_%m_%d - %H.%M.%S')) + '.csv' 


header_names = { 'VT': 'Date', 'NCR': 'ExTime', 'NCR': 'YesterdayTime', 'N': 'Name', 'DT': 'Party', ' RD ': 'Period'} 

with open(csv_file, 'w', newline='') as f: 
    w = csv.DictWriter(f, fieldnames=header_names.keys(), restval='', extrasaction='ignore') 
    w.writerow(header_names,) 
    for doc in res['hits']['hits']: 
     my_dict = doc['_source'] 

      w.writerow(my_dict) 

出力 - EX timeYesterdayTimeに置き換えられています。私が欲しい

DATE   YesterdayTime  Name Party Period 

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 

正しい出力:

DATE  YesterdayTime  YesterdayTime  Name Party Period 

20170512 12/05/2017 15:39 12/05/2017 15:39 1001  0  0 

20170512 12/05/2017 15:39 12/05/2017 15:39 1001  0  0 

20170908 08/09/2017 02:42 08/09/2017 02:42 1001  0  0 

20170908 08/09/2017 06:30 08/09/2017 06:30 1001  0  0 

答えて

0

Pythonの辞書は、重複キーをサポートしていません。 header_namesディクショナリの最後のNSCは、最初に上書きされます。

+0

正しい、どのように私は3列のためのNSCを使用することができています? –

0

重複を含むリストでフィールド名を割り当てることができます。

with open('test.csv', 'w') as f: 
    csv_file = csv.DictWriter(f, fieldnames=['foo', 'bar', 'bar', 'bar']) 
    csv_file.writeheader() 
    csv_file.writerow({'foo':1, 'bar':2}) 

のtest.CSVは含まれています。あなたが別のヘッダ名をしたい場合は、問題が解決しないただし

foo,bar,bar,bar 
1,2,2,2 

...

+0

書き込み行はheader_namesという変数を使用しているので、上記のコードは小規模で機能するかもしれませんが、私にとっては後で列を追加する予定です。上記のコードを使用して解決策を思いつく方法がありますか? –

関連する問題