2016-12-02 8 views
0

У меня есть файлы в ведре S3. Файлы данных называются датой в конце стандартной метки.python time delta - включение часа к настоящему времени

Например, ключевой файл выглядит следующим образом:

test_file_2016-12-01.tar.gz

Я хочу, чтобы скачивать файлы с даты x на сегодняшний день y. Я могу это сделать так:

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

я справлюсь время дельта прекрасно используя timedelta особенность datetime но это не поддерживает hour, а также.

Как настроить эту функцию, чтобы указать, захватывая файлы между чем-то вроде:

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

ответ

1

Внутри datetime модуль преобразует timedelta часов в секунды, что означает, что мы должны сначала завершить вычисление в секундах и затем разделите назад на 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)