4

1,000 エントリのテキスト ファイルでペア (datetime.date(x,y,z)、出現回数) のリストを返す必要があります。この関数def eventfreq(year, month):は、前述の datetime.date の年と月をパラメーターとして受け取ります。これまでのところ、私は年と月を定義しました

def eventfreq(year, month):
    F=fieldict('DOT1000.txt')
    for line in F:
        year=F[1].year
        month=F[1].month

fieldict は、ファイル内の各エントリに対して (Manufacturer、datetime.date()、year、crash、insurance) のタプルを返す関数です。各エントリから日時を抽出するためだけに必要です。私はPythonに非常に慣れていません。これらの関数のいくつかに一晩中取り組んでいます。

編集: サンプル データ:

503 958504 GENERAL MOTORS CORP. シボレー ルミナ 1990 19920606 N 0 0 サービス ブレーキ、油圧:基礎コンポーネント:ディスク:キャリパー DRACUT MA 2G1WN14T9L9 19950110 19950110 TT EVOQ

これは 1,000 の 1 つのエントリです。ペアのリスト [(datetime.date(), ファイル内の出現回数)] を作成する方法についてアドバイスが必要です。年と月は関数のパラメータです

編集: テストケース:

>>> evlist = eventfreq(1995,1)
>>> len(evlist)
17
>>> evlist[0]
(datetime.date(1995, 1, 1), 5)
>>> evlist[14]
(datetime.date(1995, 1, 15), 1)

編集: 別のサンプル エントリ:

1332 477660 ホンダ (AMERICAN HONDA MOTOR CO.) ACURA INTEGRA 1994 19940601 N 0 0 可視性: フロントガラス TUSTIN CA JH4DC4359RS 19950112 19941112 1 ウィンドウの問題。*AK VOQ

太字は日付です。私はすでにdatetime.date形式(インポートされたdatetimeモジュール)でそれを持っており、すべてのエントリの同じ場所にあります。ペアを含むリストが必要です (datetime.date(year,month,day) 、同じがファイルに出現する回数)

4

3 に答える 3

0

ファイルから整数の日付をリストに抽出する方法を知っていると仮定します。

import datetime
dates = [19940903, 19940907, 19940801, 19950701, 19950702]
formated_dates = [datetime.datetime.strptime(str(i), '%Y%m%d') for i in dates]
year_month_pairs = [(i.year, i.month) for i in formated_dates]
unique = set(year_month_pairs)
counts = [(i, year_month_pairs.count(i)) for i in unique]
于 2012-11-08T13:58:36.303 に答える
0

次のようなタプルのリストを返すと仮定fielddict()します。

[('m1', datetime.date(1995, 1, 1), 'y1', 'c1', 'i1'),
('m2', datetime.date(1995, 1, 15), 'y2', 'c2', 'i2'),
('m3', datetime.date(1995, 1, 1), 'y3', 'c3', 'i3')]

あなたの機能eventfreq()は次のようになります。

def eventfreq(year, month):
    F=fieldict('DOT1000.txt')
    #Get a list of datetimes matching year and month
    lst = [i[1] for i in F if((i[1].year == year) & (i[1].month == month))]
    #return a list of tuples (datetime, count)
    return [(i, lst.count(i)) for i in set(lst)]

これで、テストケースが期待どおりに動作するはずです。

于 2012-11-08T16:00:38.853 に答える
-1

OK、行一致形式の最初の単語から日付を取得しようとしました%Y%m%d(詳細については、このリンクを参照してください)。

>>> dict_dates = {}
>>> from datetime import datetime
>>> for line in open(r'D:\DATA\FP12210\My Documents\Temp\Python\Dates.txt'):
    for word in line.split():
        try:
            # Try to convert
            date = datetime.strptime(word, '%Y%m%d')
            # Conversion succeeded
            dict_dates[date] = dict_dates.get(date, 0) + 1
            break
        except:
            pass


>>> dict_dates
{datetime.datetime(1994, 6, 1, 0, 0): 1, datetime.datetime(1992, 6, 6, 0, 0): 1}
>>> 

あなたが提供した2行でファイルを作成しました。

于 2012-11-08T13:53:13.453 に答える