-1

私は次の形式の日付をたくさん持っています

16th February 2011
4th April 2009
31st December 2007

そして、私はそれらをこのフォーマットに変更したい

20110216
20090404
20071231

私はこれをPythonでやりたいのですが、試しましたが、頭を悩ませるregexことtimeができません。

4

4 に答える 4

4

あいまいな日付の照合のために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
于 2012-10-17T21:13:48.093 に答える
0

学習目的で、インポートなし。

月は月の辞書です。

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 
于 2012-10-17T21:10:05.227 に答える
0

2つのステップでそれを行います:

  1. 正規表現を使用し(\d+)([a-z]{2})\s+([A-Za-z]+)\s+(\d{4})て、2番目のグループを空の文字列に置き換えます

  2. time.strptime(string[, format])日付を必要な形式に変換するために使用します

于 2012-10-17T21:12:35.687 に答える
0

正規表現を使用して情報を取得し、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")
于 2012-10-17T21:15:58.843 に答える