需要从文本文件中创建一个列表

时间:2012-11-08 12:57:08

标签: python list list-comprehension

我需要在包含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服务制动器,液压:基础部件:光盘:CALIPER DRACUT MA 2G1WN14T9L9 19950110 19950110卡钳的问题冻结制造商不提供任何帮助。 TT EVOQ

这是1个1,000条目。我需要有关如何构建我的对列表[(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 HONDA(AMERICAN HONDA MOTOR CO。)ACURA INTEGRA 1994 19940601 N 0 0 VISIBILITY:WINDSHIELD TUSTIN CA JH4DC4359RS 19950112 19941112 1窗口问题。 * AK VOQ

以粗体显示日期。我已经在datetime.date格式(导入的datetime模块)中使用它,并且它在每个条目中都位于相同的位置。需要一个包含对的列表(datetime.date(年,月,日),出现在文件中的次数)

3 个答案:

答案 0 :(得分: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]

答案 1 :(得分: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)]

现在,您的测试用例应该按照您的预期运行。

答案 2 :(得分:-1)

好的,我尝试从行匹配格式%Y%m%d中的第一个单词中获取日期(有关详细信息,请参阅this link),以下是它的内容:

>>> 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行创建了一个文件。