2015-02-22 5 views
0

Я немного играю с AWS через python и boto. Я пытаюсь получить модифицированную дату для ключей из ведра AWS. После этого я обрабатываю дату в «обычный» формат даты и пытаюсь добавить каждое значение в список.python list - метод вместо строки

К сожалению, когда я добавляю значения в список и пытаюсь распечатать его результаты, я получаю функцию datetime вместо строки с датой. код выглядит следующим образом:

import boto 
s3 = boto.connect_s3() 
bucket = s3.get_bucket('mybucket') 
keys = bucket.list 
keys_latest_modified_date_list = [] 

for key in keys: 
    key_latest_modified_date = boto.utils.parse_ts(key.last_modified) 
    keys_latest_modified_date_list.append(key_latest_modified_date) 
    print key_latest_modified_date 
print keys_latest_modified_date_list 

Первые print возвращает правильную дату:

2015-02-18 10:11:58 

Хотя второй print дает мне что-то вроде этого:

[datetime.datetime(2015, 2, 18, 10, 11, 58)] 

Кто-нибудь знает, как печатать значения из как в первом print вместо этого, что я получаю от второго?

ответ

2

Вы получаете смущен str() выходом datetime объектов и их представления:

>>> import datetime 
>>> dt = datetime.datetime(2015, 2, 18, 10, 11, 58) 
>>> dt 
datetime.datetime(2015, 2, 18, 10, 11, 58) 
>>> str(dt) 
'2015-02-18 10:11:58' 
>>> repr(dt) 
'datetime.datetime(2015, 2, 18, 10, 11, 58)' 

print вызовы str на объектах печатаемых, но списки и другие контейнеры всегда показывать их содержимое с repr().

Вы должны будете использовать некоторые строки форматирования для обработки списка:

print ', '.join(map(str, keys_latest_modified_date_list)) 

напечатает разделенных запятыми список объектов даты и времени преобразуются в строки:

>>> keys_latest_modified_date_list = [dt, dt] 
>>> keys_latest_modified_date_list 
[datetime.datetime(2015, 2, 18, 10, 11, 58), datetime.datetime(2015, 2, 18, 10, 11, 58)] 
>>> ', '.join(map(str, keys_latest_modified_date_list)) 
'2015-02-18 10:11:58, 2015-02-18 10:11:58' 
>>> print ', '.join(map(str, keys_latest_modified_date_list)) 
2015-02-18 10:11:58, 2015-02-18 10:11:58 
+0

Выглядит отлично. Но есть ли возможность добавить «регулярную» строку в список? Я хотел бы сделать больше операций над списком (т. Е. Сортировкой), а «регулярная» строка будет более полезна. Печать содержимого списка не является моей главной целью. Спасибо заранее. – Piotr

+0

@ Петр: нет, нет. Объекты списка не предназначены для использования в качестве презентации конечного пользователя. Если вам нужен конкретный формат, вам нужно явно форматировать его самостоятельно. –

+0

@Piotr: вы должны преобразовать объекты в строки *, когда вам нужно представить данные *. Если вы сортируете или выполняете другие операции с объектами 'datetime', тогда * сохраняйте эти объекты * и не конвертируйте их в строки. –

Смежные вопросы