私は次の形式の日付をたくさん持っています
16th February 2011
4th April 2009
31st December 2007
そして、私はそれらをこのフォーマットに変更したい
20110216
20090404
20071231
私はこれをPythonでやりたいのですが、試しましたが、頭を悩ませるregexことtimeができません。
私は次の形式の日付をたくさん持っています
16th February 2011
4th April 2009
31st December 2007
そして、私はそれらをこのフォーマットに変更したい
20110216
20090404
20071231
私はこれをPythonでやりたいのですが、試しましたが、頭を悩ませるregexことtimeができません。
あいまいな日付の照合のためにparsedatetimeを検討することをお勧めします。
日付がNN(序数)月年のその形式からかなり不変である場合、これは機能します。
dates="""\
16th February 2011
4th April 2009
31st December 2007"""
import re
import time
for date in dates.splitlines():
p=re.findall(r'(\d+)\w\w (\w+) (\d\d\d\d)',date)
d=time.strptime(' '.join(p[0]),'%d %B %Y')
iso=time.strftime('%Y%m%d',d)
print "{0:>20} =>{1:>30} =>{2:>15}".format(date,p,iso)
プリント:
16th February 2011 => [('16', 'February', '2011')] => 20110216
4th April 2009 => [('4', 'April', '2009')] => 20090404
31st December 2007 => [('31', 'December', '2007')] => 20071231
学習目的で、インポートなし。
月は月の辞書です。
months = {"January":"01","February":"02",...}
# make sure all entries are strings, not integers
for entry in entries:
# split by spaces. this is multiple assignment.
# the first split gets assigned to date, the second, to month, the third, to year.
day, month, year = entry.split()
# parse the date. the th/rd/nd part is always 2 characters.
date = day[:-2]
if len(date) == 1:
# make sure the date is two characters long
date = "0" + date
# concatenate
print year + months[month] + date
2つのステップでそれを行います:
正規表現を使用し(\d+)([a-z]{2})\s+([A-Za-z]+)\s+(\d{4})て、2番目のグループを空の文字列に置き換えます
time.strptime(string[, format])日付を必要な形式に変換するために使用します
正規表現を使用して情報を取得し、strptimeを使用して情報を日付に変換できます。
import datetime
import re
date_re = re.compile("^([0-9]+)[a-z]* (.+)$")
example = "16th February 2011"
m = date_re.match(example)
dt = datetime.datetime.strptime("%s %s" % (m.group(1), m.group(2)), "%d %B %Y")
print dt.strftime("%Y%m%d")