【问题标题】:Time data errors in input while trying to get the sum from txt.file (PYTHON)尝试从 txt.file (PYTHON) 获取总和时输入中的时间数据错误
【发布时间】: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


    【解决方案1】:

    日期格式问题:

    %m  Month as a zero-padded decimal number.
    %d  Day of the month as a zero-padded decimal number.
    

    您正在使用这种格式,但它们必须包含 2 位数字。

    像 01,03,10 等等。

    Python Documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 2022-09-24
      • 2020-06-24
      • 1970-01-01
      • 2020-01-14
      相关资源
      最近更新 更多