来自文本文件的总计

时间:2015-11-02 13:33:36

标签: python

我有一个文本文件,其中包含每个性别的产品的好坏数据

Male      100 120 
Female    110 150 

如何计算此文本文件中两种性别的总数,以便打印出480

这是我尝试编码:

def total():
    myFile = open("product.txt", "r")
    for result in myFile:
        r = result.split()            
        print(r[1]+r[2])


total()

它打印出列的内容,但不添加它们

5 个答案:

答案 0 :(得分:1)

split的结果是一串字符串,而不是整数 "添加"带有+的两个字符串连接字符串。

示例交互有足够的线索供您解决:

>>> s = "123 456"
>>> ss = s.split()
>>> ss
['123', '456']
>>> ss[0] + ss[1]
'123456'
>>> int(ss[0])
123
>>> int(ss[1])
456
>>> int(ss[0]) + int(ss[1])
579

当你得到意想不到的结果时,打开翻译并以交互方式查看事物通常会提供大量线索。

答案 1 :(得分:1)

您需要将每个拆分文本条目转换为整数,并保持运行总计如下:

def total():
    the_total = 0

    with open("product.txt", "r") as myFile:
        for result in myFile:
            r = result.split()            
            the_total += int(r[1]) + int(r[2])

    return the_total

print(total())

这会显示:

480

使用with会自动为您关闭文件。

答案 2 :(得分:1)

还有一个

string(26) "myemail@email.com"

适用于每行中可能包含的任意数量的列

e.g。有四列

def total():
    with open('product.txt') as f:
        nums = (int(el) for r in f for el in r.split()[1:])
        return sum(nums)

print(total())

产生

Male   111 222 333 444
Female 666 777 888 999 

答案 3 :(得分:0)

正如 jonrsharpe 的评论中所述,您没有添加以前的值。

由于您要添加所有内容,请跟踪以前的值并添加新行(全部转换为整数)。将您的代码更改为:

def total():
    t = 0
    with open("product.txt", "r") as myFile:
        for result in myFile:
            r = result.split()
            t += int(r[1]) + int(r[2])
    return t
print(total()) # 480

由于这个被选中,我正在编辑包括文件关闭。 由 Martin Evans提及

  

使用with将自动为您关闭文件。

答案 4 :(得分:0)

>>> def total():
        myfile = open("/home/prashant/Desktop/product.txt" , "r")
        for res in myfile:
                r = res.split()
                print (int(r[0])+int(r[1]))

str未转换为int,这是你的问题