3

「Jan」、「Feb」、「Mar」などを含む日付のエントリのリストを含むファイルがあります。

が欲しいです

569207、ngph、RUN、512,16、2012 -Jan-23 01:42、2012-04-23 10:53

になる

569207、ngph、RUN、512,16、2012-01-23 01:42、2012-04-2310: 53

私は次のように書いています:

   for line in f:
        if re.search(r'Jan', line):
            f1.write(line.replace('Jan', '01'))
        elif re.search(r'Feb', line):
            f1.write(line.replace('Feb', '02'))
        elif re.search(r'Mar', line):
            f1.write(line.replace('Mar', '03'))
        elif re.search(r'Apr', line):
            f1.write(line.replace('Apr', '04'))
        elif re.search(r'May', line):
            f1.write(line.replace('May', '05'))
        elif re.search(r'Jun', line):
            f1.write(line.replace('Jun', '06'))
        elif re.search(r'Jul', line):
            f1.write(line.replace('Jul', '07'))
        elif re.search(r'Aug', line):
            f1.write(line.replace('Aug', '08'))
        elif re.search(r'Sep', line):
            f1.write(line.replace('Sep', '09'))
        elif re.search(r'Oct', line):
            f1.write(line.replace('Oct', '10'))
        elif re.search(r'Nov', line):
            f1.write(line.replace('Nov', '11'))
        elif re.search(r'Dec', line):
            f1.write(line.replace('Dec', '12'))

これは機能しますが、よりクリーンな方法はありますか?約100行のファイル全体を反復処理し、月を自動的に数値に変更したいと思います。ありがとう。

4

3 に答える 3

12

2 つの可能性:

  1. 日時モジュール_
  2. あなたが持っているようなDIYソリューション

Python のドキュメントは読む価値があります。この質問に答えるだけでなく、もっと簡単な方法が見つかるかもしれません。

DIY ソリューションに関しては、多くの繰り返しコードがあるようで、正規表現は必要ありません。あなたはただすることができます

for i, month in enumerate(months,1): 
    line.replace(month, str(i))

months月のリストです。

于 2012-04-23T10:14:50.573 に答える
10

datetime が答えです。たとえば、次のようになります。

>>> import datetime
>>> datetime.datetime.strptime('Mar 2013',"%b %Y")
datetime.datetime(2013, 3, 1, 0, 0)

http://docs.python.org/2/library/datetime.htmlでフォーマット ディレクティブを確認してください。

于 2013-05-14T10:22:17.847 に答える
3

また、辞書を使用することもできます:

month_numbers = {'-Jan-': '-01-', '-Feb-': '-02-', ...}
for k, v in month_numbers.items():
    line = line.replace(k, v)
print(line)

replace()月名が文字列に含まれているかどうかを最初に確認せずに、単純な文字列メソッドを使用できる正規表現を使用します。Janstringが入力文字列の他の部分にある可能性があるかどうかはわかりませんが、IMO に置き換える-Jan-方が安全-01-です。

于 2012-04-23T10:29:54.757 に答える