我需要在包含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(年,月,日),年和月出现在文件中的次数)
答案 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行创建了一个文件。