私は次の形式の日付をたくさん持っています
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")