从文件中读取数据,使用python添加和查找数据百分比

时间:2017-03-23 21:33:43

标签: python

以下是我要尝试的课程:"创建一个程序,读取存储在文件中的所有数字并计算总数(总和),然后将值显示为屏幕总点数。接下来,让程序计算平均分数,然后将该值显示为屏幕分数百分比。接下来,确保程序处理IOError和ValueError异常。我已尝试使用循环的十几种不同的方法,但无法使任何工作。我能让它发挥作用的唯一方法是这样做:

def main ():
infile = open('numdata.txt', 'r')
num1 = int(infile.readline())
num2 = int(infile.readline())
num3 = int(infile.readline())
num4 = int(infile.readline())
num5 = int(infile.readline())
num6 = int(infile.readline())
num7 = int(infile.readline())
num8 = int(infile.readline())
infile.close()
total = num1+num2+num3+num4+num5+num6+num7+num8
average = total/8
print('the total: ', total)
print('the average: ', average)

main()

这是我能想到的最好的:

def main():
    total = 0

    try:
        NumberFile = open('numdata.txt', 'r')

        for line in NumberFile:
            amount = float(line)
            total += amount
            print(format(total, ',.2f'))

        print('Total: ', format (total, ',.2f'))

    except ValueError:
        print('Non-numeric data found in the file.')

    except IOError:
        print('An error occured trying to read the file.')

    except:
        print('An error has occured.')

    finally:
        NumberFile.close()                      

main()

这是我得到的输出:     78.00,     171.00,     256.00,     356.00,     437.00,     513.00,     607.00,     684.00,     在文件中找到非数字数据。

如果有人想给我看一个如何使用循环来做加法的例子,我将非常感激。文件中的数字是: 78 93 85 100 81 76 94 77 但是,使用1-8就可以了。任何和所有的帮助表示赞赏。我对此非常陌生,因此我确信有一种更简单的方法可以做到这一点,而不是我一直在努力的方法。我尝试过使用我正在使用的书中的例子,即使我逐字逐句地复制它们也没有用。我也尝试了视频示例,即使我完全复制了所有内容,但仍无法使循环工作。超级沮丧。 这是我尝试使用但不起作用的一个例子:为简单起见,这些数字仅为1,2,3。它们位于名为06_tips的.txt文件中

tipfile = open('06_tipfile.txt', 'r')
strRead = tipfile.readline()
ftTotalTips = float(strRead)
while strRead != '':
strRead = tipfile.readline()
if strRead != '':
    ftTotalTips = float(ftTotalTips) + float(strRead)
print('Total tips are: ', format(ftTotalTips,'.2f'))

那么应该正常工作吗?它对我来说并不适合。

我尝试了一些类似的例子,但没有工作,所以如果有人想为我提供我的问题的答案,那就太棒了,谢谢:)

3 个答案:

答案 0 :(得分:0)

试试这个代码段:

def is_float(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

def get_nums(infile):
    with open(infile, 'r') as f:
        return [float (x) for x in f.read().splitlines() if is_float(x)]

def main():

    nums = get_nums('numdata.txt')
    if nums:
        total = sum(nums)
        avg   = total / len(nums)

        print('The total: ', total)
        print('The average: ', avg)
    else:
        print('No numbers found in the textfile')

if __name__ == '__main__':
    main()

希望它有所帮助!

答案 1 :(得分:0)

这是一个帮助您入门的基本示例。您可以使用file.readlines()读取文件中的所有行,而不是硬编码将从文件中读取多少个数字,这些行返回一个列表,列表中包含length方法:

import sys

def main ():
    nums = []
    with open('numdata.txt', 'r') as data:
        for d in data.readlines():
            try:
                nums.append(int(d.strip('\n')))
            except IOError:
                print("got IOError")
                sys.exit()
            except ValueError:
                print("got ValueError")
                sys.exit()

    total = sum(nums)
    average = total/len(nums)
    print('the total: ', total)
    print('the average: ', average)

main()

exception handling可能需要更详细,特别是如果文件中的数字最终是float之类的各种数据类型,但是对于示例中的数字int()会工作的。

答案 2 :(得分:0)

我不知道你的文件是怎么样的,但如果你的数字用新行分隔(\ n)那么你可以用这个

with open("numdata.txt") as t:
     print sum(map(int, filter(None, t.read().split("\n"))))

总和 - 总结清单

map - 将数字从字符串更改为int

filter - 取出任何空字符串(我得到了很多)