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, injury) 元组。我只需要它从每个条目中提取日期时间。我对python很陌生,我整夜都在研究其中的几个函数。

编辑:示例数据:

503 958504 GENERAL MOTORS CORP. CHEVROLET LUMINA 1990 19920606 N 0 0 行车制动器,液压:基础组件:盘:卡钳 DRACUT MA 2G1WN14T9L9 19950110 19950110 卡钳冻结问题。TT EVOQ

这是 1,000 中的 1 个条目。我需要有关如何构建我的对列表的建议 [(datetime.date(), #of 在文件中出现)]。年和月是函数的参数

编辑:测试用例:

>>> 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 HONDA (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

好的,我尝试从行匹配格式的第一个单词中获取日期%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 回答