0

私はPython3.2.2プログラムを持っており、その中には次のようなリストがあります。

['January 26, 1991', 'February 29, 2012', 'December 10, 2094']

百万の「if」ステートメントを使用せずに、リストを取得して変更したり、次のような新しいリストを作成したりするにはどうすればよいですか。

['01261991', '02292012', '12102094']

基本的に完全な日付形式をmmddyyyy形式に変換しますか?

私はここで他のさまざまな質問を見てきましたが、このような質問はまだ見つからないようです。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです!

4

7 に答える 7

1

Pythonには、時間を処理するためのモジュールが少なくとも2つあります。(最初はtimeで、2番目はですdatetime)。具体的にはstrftimestrptime文字列から「時間オブジェクト」を作成し、次に「時間オブジェクト」から文字列を作成するためのメソッドを見てください。

また、Pythonでは、リストは通常​​'[item1、item2、...]'として表されることに注意してください(中括弧ではなく角括弧-中括弧は辞書に使用されます...)。

そして最後に、最終的な希望の日付文字列は、他の2つと同じルールに準拠していません...

于 2012-05-05T00:54:01.253 に答える
1

使用したくない場合は、modulesこれを試すことができます:

dates=['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
def converter(x):
   x=x.split()
   dic={'January':'01','February':'02','March':'03','April':'04','May':'05','June':'06',
         'July':'07','August':'08','September':'09','October':'10','November':'11','December':'12'
        }
   month,day,year=dic[x[0]],x[1][:-1],x[2]
   if len(day)==1:
     day='0'+day

   return month+day+year

new_lis=[]

for x in dates:
   new_lis.append(converter(x))

print(new_lis)

['01261991', '02292012', '12102094']
于 2012-05-05T01:27:57.737 に答える
1

時間操作については、通常、標準ライブラリの時刻または日時モジュールを確認する必要があります。

>>> import time
>>> raw_string_list = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
>>> struct_time_list = [time.strptime(raw_string, '%B %d, %Y') for raw_string in raw_string_list]
>>> final_list = [time.strftime('%m%d%Y', struct_time) for struct_time in struct_time_list]
>>> final_list
['01261991', '02292012', '12102094']

この場合、timeモジュールの2つの関数を使用します。strptime文字列をtime.struct_timeに変換し直すこととstrftime、新しい文字列に戻すことです。

于 2012-05-05T01:38:10.610 に答える
1

組み込みのdatetimeモジュール、具体的にはstrptimeとstrftimeを使用します。マップを利用してリストの各要素に変換関数を適用すると、次のことができます。

#!/usr/bin/env python

from datetime import datetime

dateList = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']

def convertDate(dateString):
    dt = datetime.strptime(dateString,"%B %d, %Y")
    return dt.strftime("%m%d%Y")

print map(convertDate,dateList)
于 2012-05-05T01:43:55.357 に答える
0

あなたが欲しいstrptimestrftime:私はそれpが「プロセス」のためでfあり、フォーマットのためであると思います。

これらは両方とも、フォーマット文字列とその文字列に従って処理する引数を取ります。関数にはstr*timeCにまでさかのぼる豊富な歴史があり、Pythonが持っているものは、それがより優れていることを除いて、元の関数にかなり直接関連しています。

フォーマット文字列には独自のミニ言語があり、見つけるのが難しい重大な間違いを犯すのに十分なほど直感的ではないことがわかるので、私はそれがより良いと言いstrptimeますstrftime(たとえば、分が大文字か小文字のmかを調べる必要があります。)

また、Linux(そしておそらくOSX?)を使用しman strptimeている場合は、Pythonのドキュメントよりも役立つと思います。同じことが。にも当てはまりますstrftime

于 2012-05-05T01:26:03.700 に答える
0

まず、文字列を3つのチャンクに分割します。

'January 26, 1991'.split()    # results in ['January', '26,', '1991']

次に、辞書を使用して月の名前を2桁の数字に変換します。

months = {'January':'01', 'February':'02'}
months['January']     # results in '01'

3番目に、その日のコンマを取り除き、2桁であることを確認します。

第4に、月+日+年を再構成して、最終結果を取得します。

第5に、それを関数にラップし、リスト内の各要素に関数を適用します。

于 2012-05-05T01:29:51.927 に答える
0

次のPythonコードでタスクを実行できます。

#! /usr/bin/env python
from time import strptime, strftime
input = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
date_list = []
output = []

for i in input:
    date_list.append(strptime(i, '%B %d, %Y'))

for dd in date_list:
    output.append(strftime('%m%d%Y', dd))
于 2012-05-05T01:40:39.097 に答える