2017-10-13 1 views
1

以下はデータを取得し、データをCSVファイルに変換するコードです(これは動作しています)。私は深夜から午後4時(BST(英国夏時間)UTC/GMT +1時間)に返されたデータに焦点を当てようとしています。Pythonで日付範囲を使用して日付と時刻を使用してデータをプル/クエリする方法

誰かが私にこれをどのようにしてくれたらいいか教えてください.DTDTは日付です。

私が達成しようとしていることが意味をなさない場合は、私がそれを説明しようとしていることを知らせてください。

マイコード:

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) 



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) 

は、例えば、私は(現在の日付を使用して)午後2時までの深夜からデータを返すようにしたいです。

+0

データを含むcsvファイルを1行分共有できますか? –

+0

@ Dinesh、これはCSVの例です。 #b422560 \t#b422562 \t#b422576 F 0 2017年5月9日午前6時24分\t F 0 2017年7月9日午後04時55 \t F 13/10/2017夜12時\t #b422578 \t#b422505 13/10/2017 13:24 F 0 25/08/2017 12:26 \t F 2017年5月9日6時24 \t \t B#r110576 2017年8月9日午前2時53 \tのb#r110585 13/10/2017 14時\t#r110594 B例えば、ファイルあなたが今日のデータを含む3行があり、私はファイル内に表示されたいだけであることがわかるように、現在の日付データは午後6時から午後6時までの間に必要です。 – Rich

+0

@Dinesh、チャットのディスカッションをしたいですか?私は行を貼り付けるとき、形式はコメントボックスに間違っています。あなたがそれを正しく見ることができるかどうかわからない – Rich

答えて

0

csvファイルに書き込む前に、時間範囲を確認してファイルに書き込むことができます。

は、時間範囲を確認するための関数の下に追加します。与えられた時間は

範囲

である場合

def time_in_range(start, end, x): 
    """Return true if x is in the range [start, end]""" 
    if start <= end: 
     return start <= x <= end 
    else: 
     return start <= x or x <= end 

それが本当次に、あなたのコードでこれを追加します。

import datetime 
#Range here(Midnight to 2 PM) 
start = datetime.time(0,0,0) 
end = datetime.time(14,0,0) 

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 

     #Get time 
     curr_time = my_dict['DTDT'] 
     #Conver it into datetime object 
     d_obj = datetime.datetime.strptime(curr_time, '%d/%m/%Y %H:%M') 
     #Check whether it is in range using above function 
     #If in range, then it will write to file 
     if time_in_range(start, end, d_obj.time()): 
      w.writerow(my_dict) 
関連する問題