2014-09-03 3 views
0

Я пытаюсь взять список списка, и я хотел бы разделить объект datetime, который находится в первом элементе каждого элемента списка, как показано ниже.Преобразование объекта Unicode в объект Datetime в список списка

список = [[u'2014-09-02T23: 00: 00' , 1, 1, u'msdn.microsoft.com 'u'Engineering & Technology', 1], [u'2014 -09-02T23: 00: 00 ', 1, 1, u'qr.ae', u'Uncategorized ', 0], [u'2014-09-02T23: 00: 00', 1, 1, u'accounts .google.com 'u'General Связь & планирования', 0]]

Я видел предыдущий Stack вопрос о Unicode для дат (link) и попробовал следующий код:

date_unicode знак равно ул (список [0] .split ('Т'))

дата = datetime.strptime (date_unicode, '% Y-% m-% дТ% H:% S')

только получите сообщение об ошибке, указывающее, что объект модуля не имеет атрибута 'strptime.' Если кто-то сможет мне помочь не только расколоть даты юникода на объекты фактической даты для каждого элемента списка, я бы очень признателен.

+0

* Рядом *: Я надеюсь, что ваша фактическая программа не использует 'list' в качестве имени переменной. Нельзя использовать повторное использование встроенных имен. –

+0

Благодарим вас за помощь. Также нет, он не использует 'list' как имя переменной, но спасибо за проверку! –

+0

Я думаю, вы можете смутить одну точку. Вы пишете «* объект datetime, который находится в первом элементе *», но образец, который вы предоставляете, не имеет объектов 'datetime'. Первым элементом каждого списка является элемент 'unicode'. Является ли ваша цель преобразовать строку unicode в объект 'datetime'? Или ваша цель - преобразовать строку unicode в пару строк? –

ответ

1
  1. Ваш список является двумерным, поэтому вам нужен дополнительный индекс: list[0][0].
  2. Ваш формат strptime() принимает всю ISO8601 дату, так что вам не нужно .split()
  3. strptime() является метод datetime.datetime
date_unicode = str(list[0][0]) 
date = datetime.datetime.strptime(date_unicode, '%Y-%m-%dT%H:%M:%S') 
print date 

Наконец, у вас есть несколько элементов списка, так вам понадобится петля:

newlist = [datetime.datetime.strptime(item[0], '%Y-%m-%dT%H:%M:%S') 
      for item in list] 
print newlist 
+0

Роб, спасибо за помощь. Когда я начал играть с кодом, я понял, что новый список содержит список элементов, который выглядит так: '[datetime.datetime (2014, 9, 2, 23, 0), datetime.datetime (2014, 9, 2 , 23, 0), datetime.datetime (2014, 9, 2, 23, 0)] ', и мне просто интересно, есть ли способ адаптировать этот код, чтобы результат одного элемента« списка »выглядел чем-то например: '[2014-09-02, 23:00:00, 1, 1, u'msdn.microsoft.com ', u'Инжиниринг и технология', 1]', а не с тегами datetime.datetime. –

+0

Из вашего комментария, похоже, вы не хотите иметь объекты 'datetime' вообще. Чтобы создать новый список, попробуйте следующее: 'newlist = [item [0] .split ('T') + item [1:] для элемента в списке]'. Или, если вы хотите изменить существующий список: 'для элемента в списке: item [0: 1] = item [0].split ('T') ' –

+0

Да, первый фрагмент кода, который вы передали, был именно тем, что я искал. Когда я запускаю его, я получаю список aa, который выглядит примерно так: '[[u'2014-09-02 ', u'23: 00: 00', 1, 1, u'msdn.microsoft.com ', u'Engineering & Technology', 1], [u'2014-09-02 ', u'23: 00: 00', 1, 1, u'qr.ae ', u'Uncategorized', 0]] 'и мне просто интересно, есть ли хороший способ перебирать список, чтобы сообщить python, что даты и время - это даты и время (поэтому я мог бы, например, добавить или вычесть даты, если захочу), потому что, поскольку я понимайте это, это строки Unicode. –

0
from datetime import datetime 
print [datetime.strptime(x[0],"%Y-%m-%dT%H:%M:%S") for x in l] 
[datetime.datetime(2014, 9, 2, 23, 0), datetime.datetime(2014, 9, 2, 23, 0), datetime.datetime(2014, 9, 2, 23, 0)] 

Вам необходимо использовать from datetime import datetime или еще datetime.datetime.strptime

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