【发布时间】:2016-06-03 13:23:34
【问题描述】:
我正在尝试制作的程序应该让用户输入开始日期和结束日期,并且程序将遍历包含诸如
等信息的 txt 文件中的列表1-2-2014,store1,42305.67,23
12-4-2014,store2,21922.22,17
10-2-2015,store3,63277.9,32
10-5-2015,store4,83290.09,16
信息以逗号分隔。第三个数字是代表金钱的价值。例如,如果用户输入(参考上面的 txt 文件信息示例)
start date as 1-2-2014
end date as 10-2-2015
该程序旨在从开始日期计算代表金钱的数字,包括日期之间的数字(如果有的话)(上面我输入的示例日期显示中间有一个日期)并打印总和。
该程序应该使用 txt 文件中的任何开始和结束日期输入,如果没有记录,则打印不存在此类记录。
下面是两个不同的程序,在其他人的帮助下,它们应该可以做到我想出的但会产生错误,我希望有人可以修复并指出我出错的地方。
代码一,最后说明错误:
from datetime import datetime
def calculate(file_name, s_date, e_date):
dollar = 0
_format = '%d-%m-%Y'
start_date = datetime.strptime(s_date, _format)
end_date = datetime.strptime(e_date, _format)
with open(file_name) as f:
lines = f.readlines()
for line in lines:
l = line.split(',')
date = datetime.strptime(l[0], _format)
if date >= start_date and date <= end_date:
dollar = dollar + float(l[2])
return dollar
start_date = raw_input('Enter start date')
end_date = raw_input('Enter end date')
result = calculate('file.dat', start_date, end_date)
print (result)
ValueError: time data '\n' does not match format '%d-%m-%Y'
仅供参考(日期输入为 1-2-2014 和 10-2-2015)
下面的代码 2,最后说明错误:
from datetime import datetime
begin_date = datetime.strptime(input('Enter start date (dd mm yyyy): '), '%d %m %Y')
end_date = datetime.strptime(input('Enter end date (dd mm yyyy): '), '%d %m %Y')
with open ('data.txt', 'r') as f:
total = 0
for line in f:
strlist = line.rstrip().split(',')
dt = datetime.strptime(strlist[0], '%d %m %Y')
if begin_date <= dt <= end_date:
total+=float(strlist[2].split('$')[1])
print(total)
ValueError: time data '' does not match format '%d %m %Y'
谢谢。解决方案的绿色勾号
【问题讨论】:
标签: python csv datetime error-handling text-files