2

さまざまな人間の日付/時刻形式の文字列を Python 互換のものに変換する関数を考え出そうとしています (から'*yyyy-MMM-dd*'まで'*%Y-%b-%d*')。

これまでのところ、以下の翻訳辞書 (タプルのリスト[('yyyy','%Y'),('MMM','%b'),...]) を作成したので、入力フォーマット文字列のプレースホルダー フィールドをフィールドに変換できますstrptime '%x'

'yyyy-MMM-dd' --> '{5}-{3}-{12}'

しかし、私は次に何をしますか?私は複数の方法を試しました:

>>> re.sub('({\d+})',translateList['\1'][1],'{5}-{3}-{12}')
TypeError: list indices must be integers, not str

>>> re.sub('({\d+})',translateList[int('\1')][1],'{5}-{3}-{12}')
ValueError: invalid literal for int() with base 10: '\x01'

>>> re.sub('({\d+})',translateList[eval('\1')][1],'{5}-{3}-{12}')
SyntaxError: unexpected EOF while parsing

一致したものをリストに渡すにはどうすればよいですか? または、これを行う他の方法はありますか?

編集:私の現在のアプローチはこれであり、完全には満足していません:

def _getDatetimeFormatStringFromMuggleString(input):
    muggleList = [
        ('yyyy','%Y'), ('yy','%Y'),                             # year
        ('MMMM','%B'), ('MMM','%b'), ('MM','%m'), ('M','%m'),   # Month
        ('dddd','%A'), ('ddd','%a'), ('dd','%d'), ('d','%d'),   # day
        ('HH','%H'), ('H','%H'), ('hh','%I'), ('h','%I'),       # hour
        ('mm','%M'), ('m','%M'),                                # minute
        ('ss','%S'), ('s','%S'),                                # second
        ('tt','%p'), ('t','%p'),                                # AM/PM
    ]

    for i in muggleList:
        if i[0] in input and '%'+i[0] not in input:
            input = input.replace(i[0], i[1])

    return input
4

2 に答える 2

0

なぜあなたは使わないのですかstrptime

>>> from datetime import datetime
>>> datetime.strptime('2012-12-12', '%Y-%j-%d')
datetime.datetime(2012, 1, 12, 0, 0)
于 2013-09-12T15:38:25.857 に答える