用Python打印出来

时间:2016-11-07 18:16:59

标签: python fileparsing

我正在编写一个程序,用户在文本文件中输入销售,程序读取文件并打印出每个销售类别的总金额。以下是文本文件的示例:

Alice;Lodging;49.99;10/12/2016
Bob;Dining;8.42;10/13/2016
Charles;Lodging;55.76;10/14/2016
David;Dining;19.95;10/15/2016
Eve;Rental;105.99;10/16/2016
Frank;Rental;raft;10/17/2016

程序必须有两个例外:错误文件名的IOError和无法将数量解析为浮点数的ValueError。对于ValueError,程序必须继续跳过该行。

到目前为止,这是我的代码:

from collections import defaultdict

my_dict = defaultdict(float)
filename = str(input(("Sales file: ")))
  try:
  with open(filename) as f:
    for line in f.readlines():
        _, key, val, _ = line.split(';')
        try:
            my_dict[key] += float(val)
        except ValueError:
            print ('The amount %s, cannot be converted to a float!', line.strip())
except IOError:
    print ("No such file or directory:", filename)
    sys.exit()

每次我运行它,我都会得到这个:

Sales file: sales.txt
The amount %s, cannot be converted to a float! Frank;Rental;raft;10/17/2016

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:2)

你忘了实际格式化字符串。试试这个:

print ('The amount %s, cannot be converted to a float!' % val, line.strip())

请注意% val

答案 1 :(得分:0)

您的代码没有问题。实际上你的文件中存在问题。您的文件包含最后一行中第三个字段的格式数据不正确。因此,当您尝试将字符串转换为float时,您将获得异常,因为该值不适合将其转换为float。

from collections import defaultdict

my_dict = defaultdict(float)
filename = str(input(("Sales file: ")))
try:
    with open(filename) as f:
      for line in f.readlines():
        _, key, val, _ = line.split(';')
        try:
            my_dict[key] += float(val)
        except ValueError:
            print ('The amount %s, cannot be converted to a float!' % val, line.strip())
except IOError:
    print ("No such file or directory:", filename)
    sys.exit()

答案 2 :(得分:0)

回答这个问题感觉很愚蠢,但弗兰克的“筏子”;出租;筏子; 2016年10月17日“,这是导致你的错误的原因。 如果您遇到与此有关的其他问题,请说出来以便我们回答。为什么“筏”在那里?