2016-12-02 5 views
0

나는 S3 버킷에 파일이 있습니다. 데이터 파일의 이름은 표준 레이블 끝에 날짜가 표시됩니다.python 시간 델타 - 시간의 포함

예를 들어, 파일 키는 다음과 같습니다

test_file_2016-12-01.tar.gz

내가 날짜 y에 날짜 x에서 파일을 다운로드하고 싶습니다. 이렇게 할 수 있습니다 :

conn = boto.connect_s3(host="s3-eu-west-1.amazonaws.com") 
bucket = conn.get_bucket(bucket_name) 
k = Key(bucket) 
key_prefix = "test_file" 
date_o = date(2016,11,30) 
date_1 = date(2016,12,01) 
day_delta = date_1 - date_o 
for i in range(day_delta.days +1): 
    file_key = key_prefix + str(date_o + td(days=i)) + "tar.gz" 
    # Get the file 
    k.key = file_key 
    # Location for download destination 
    temp_location = "./tmp/" + file_key 
    k.get_contents_to_filename(temp_location) 

그러나 지금은 더 정밀한 해상도 데이터를 수집하고 시간 해상도로 데이터를 추가하려고합니다.

test_file_2016-12-01-10.tar.gz

내가 잘 datetimetimedelta 기능을 사용하여 시간 델타의를 처리 할 수 ​​있지만, 이것은뿐만 아니라 hour을 지원하지 않습니다

따라서 파일은 다음과 같이.

가 어떻게이 같은 일 사이에 파일을 캡처 지정 조정할 수 있습니다

date_o = datetime(2016,11,30,01,0,0) 
date_1 = datetime(2016,12,01,12,0,0) 

답변

1

내부적으로, 우리가 처음 초 단위로 계산을 완료해야한다는 것을 의미 초에 timedelta시간 변환됩니다 datetime 모듈 및 원하는 시간 범위를 얻으려면 3600으로 다시 나눕니다. 그런 다음 개별 시간을 표시하기 위해 반복 할 때 strftime에 원하는 형식을 제공하면됩니다.

import datetime as dt 

date_o = dt.datetime(2016, 11, 30, 0) 
date_1 = dt.datetime(2016, 12, 1, 0) 

delta_hours = (date_1 - date_o + dt.timedelta(hours=1)).total_seconds()/3600 

for hour in range(int(delta_hours)): 
    current_time = date_o + dt.timedelta(hours=hour) 
    file_name = 'test_file_' + dt.datetime.strftime(current_time, 
                '%Y-%m-%d-%H') + '.tar.gz' 
    print(file_name)