2017-10-13 5 views
1

다음은 데이터를 가져 와서 데이터를 CSV 파일로 변환하는 코드입니다 (현재 작동 중임). 전 단지 몇 시간 동안 날짜를 사용하여 오후 4시 (BST (영국 서머 타임) UTC/GMT +1 시간)까지 자정부터 반환되는 데이터에만 집중하려고합니다.파이썬에서 날짜 범위를 사용하여 시간 및 날짜를 ​​사용하여 데이터를 가져 오거나 쿼리하는 방법

누군가가 나를 어떻게 보여 주시겠습니까, 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 파일의 한 행을 공유해주십시오. –

+0

@ Dinesh는 CSV의 예제 행입니다. 13/10/2017 0시 \t F 번호 b422560 \t \t 0 1,001 2017년 7월 9일 16시 55분 \t F 번호 b422562 \t \t 0 1,001 2017년 5월 9일 6시 24분 \t F # 1 b422576 0 \t \t 1,001 2017년 5월 9일 6시 24분 \t F 번호 b422578 \t \t 0 1,001 25/08/2017 12시 26분 \t F 번호 b422505 \t \t 0 1,001 13/10/2017 13시 24분B # 1 r110576 \t \t 0 1,001 2017년 8월 9일 2시 53분 \t B # 1 r110585 \t 예 \t \t 1,001 0 0 \t 1,001 13/10/2017 14시 \t B # 1 r110594, 파일 내가 오늘 밤 데이터까지 자정부터 현재 날짜 데이터를 원한다. 오늘의 데이터가 포함 된 3 행이 있다는 것을 알 수있다. 단지 파일에 표시된 것을 원한다. – 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)