ValueError: данные времени не соответствуют формату - PullRequest
0 голосов
/ 03 июня 2018

Я использую Python 3.6.

У меня проблема с переформатированием дат.Мой код в настоящее время обрабатывает 610 дат, но код генерирует ошибку значения для дат, содержащих август.

ОШИБКА: данные времени 'Augu 30, 2017' не соответствуют формату '% B% d,% Y'

Вот строка HTML, которую пытается использовать мой кодпереформатировать.

 <td>
   <div class="date">
     <span data-date-format="MMMM Do, YYYY" data-date-value="2017-08-30T16:04:39.3+00:00" data-hook="datetime">August 30th, 2017</span>
   </div>
 </td>

Дата в этой строке: 30 августа 2017 г. , так что является причиной ошибки значения?

Вот мой код:

publishedDateFormat = table.find('div', {'class': 'date'})
for date in publishedDateFormat.find('span'):
   cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')
   locale.setlocale(locale.LC_ALL, 'en_US')
   publishedDate = datetime.datetime.strptime(cleanDate, '%B %d, %Y').strftime('%m%d%Y')
   list_of_cells.append(publishedDate)

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

В вашем коде

cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')

replace ('st', '') меняет август на Augu, что вызывает ошибку.

Пожалуйста, исправьте ваше форматирование.

Используйте regex для сбора полей даты, а затем создайте объект cleanDate следующим образом: -

import re, locale, datetime

# considering dateString is the string representation of Date from Text
dateString = 'August 30th, 2017'
dateValues = re.search(r'(\w+)[\s](\d+)[A-Za-z\s,]*(\d+)', dateString)
if dateValues:
    cleanDate = dateValues.groups(0)[0]+' '+dateValues.groups(0)[1]+', '+dateValues.groups(0)[2]
    locale.setlocale(locale.LC_ALL, 'en_US')
    publishedDate = datetime.datetime.strptime(cleanDate, '%B %d, %Y').strftime('%m%d%Y')
    print publishedDate
0 голосов
/ 03 июня 2018

Строка, которая вызывает проблему:

cleanDate = date.replace('nd', '').replace('rd', '').replace('st', '').replace('th', '')

Вы избавляетесь от "st" от "August".

Я бы порекомендовал использовать регулярные выражения (или некоторые другиеозначает) проверить, является ли непосредственно перед ним символ цифрой ([0-9]).

Пример регулярного выражения:

cleandate = re.sub('([0-9])(nd|rd|st|th)' , '\g<1>', date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...