2016-10-06 10 views
0

次の内容のhtml文字列をスクラップしました。文字列を分割してdatetimeに変換します

[2016' xe4rz u'Mitglied seit M \]

Mの\ xe4rzはマルツ(3月のドイツ語)でなければなりません。

このスクラップされた出力をdatetimeで変換したいとします。 私の最初の試みは、文字列の出力を変換し、次のコードでこれを分割することでした。

私の新しい出力が今
strDate = string.split(str(scrapped)) 

[ "[u'Mitglied"、 'seit'、 'Mの\ xe4rz'、 "2016' ]"]

次のステップは、月の最初の日を文字列に追加することです。

> strDate = "1. " + strDate[2] + " " + strDate[3] 

新しい出力は次のとおりです。

"2016' xe4rz 1. M \]"

どのように私は、äでの\ xe4を削除し、削除することができます「]を。 最後に、この文字列をPythonでdatetimeで "1März2016"に変換する方法を教えてください。

ご回答ありがとうございます。

答えて

0

多くのコードがあります。あなたは簡素化や採用、それを、私はそれが役立つはずだと思うことができます。

# encoding: utf-8 

import datetime 

months = { 
    u'Januar': '1', 
    u'Februar': '2', 
    u'März': '3', 
    u'April': '4', 
    u'Mai': '5', 
    u'Juni': '6', 
    u'Juli': '7', 
    u'August': '8', 
    u'September': '9', 
    u'Oktober': '10', 
    u'November': '11', 
    u'Dezember': '12' 
} 

def str2date(str_date, date_format='%d.%m.%Y', err_value=None, do_raise=False): 
    u""" 
     Convert string with date to datetime instance 
    """ 
    if isinstance(str_date, datetime.date): 
     result = str_date 
    else: 
     datetime_templates = (
      (date_format, 255), 
      ('%d.%m.%Y', 10), 
      ('%Y-%m-%dT%H:%M:%S', 19), 
      ('%Y-%m-%d %H:%M:%S', 19), 
      ('%d.%m.%Y %H:%M:%S', 19), 
      ('%Y-%m-%dT%H:%M', 16), 
      ('%Y-%m-%d %H:%M', 16), 
      ('%d.%m.%Y %H:%M', 16), 
      ('%Y-%m-%d', 10), 
      ('%H:%M:%S', 8), 
      ('%H:%M', 5), 
     ) 

     for tmpl, baund in datetime_templates: 
      try: 
       result_date = datetime.datetime.strptime(str_date[:baund], tmpl).date() 
      except (ValueError, TypeError) as err: 
       raise err 
      else: 
       result = result_date 
       break 
     else: 
      if do_raise: 
       raise ValueError 
      else: 
       result = err_value 
    return result 

scrapped = "[u'Mitglied seit M\xe4rz 2016']" 

encoded = unicode(scrapped.replace("[u'", '').replace("']", ''), 'unicode-escape') 

splitted = encoded.split() 

replaced = [months[i] if i in months else i for i in splitted] 

str_date = u'.'.join(['1', replaced[2], replaced[3]]) 

result_date = str2date(str_date) 

print result_date 
print isinstance(result_date, datetime.date) 
+0

おかげで、あなたは私をたくさん助けました。 – Severin

0

\ xe4文字をエンコードする方法があります。

str = 'Mitglied seit M\xe4rz 2016' 
str = str.decode('unicode-escape').encode('utf-8') 
str = '1. ' + str.split(' ')[2] + ' ' + str.split(' ')[3] 
+0

このコードの後の出力は、1 M \ XC3の\のxa4rzそれが動作2016 – Severin

関連する問題