【问题标题】:Returning .txt file contents返回 .txt 文件内容
【发布时间】:2015-04-05 19:08:49
【问题描述】:

我有一个文件,Testing.txt:

type,stan,820000000,92

paul,tanner,820000095,54

remmy,gono,820000046,68

bono,Jose,820000023,73

simple,rem,820000037,71

我正在尝试创建一个接收此文件并返回的函数:

  • 所有成绩的平均值(每行文件中的最后一个数字),
  • 以及最高和最低成绩的 ID(文件中的长数字)。

我知道如何获取平均值,但在尝试获取 ID 时遇到了困难。

到目前为止,我的代码如下所示:

#Function:

def avg_file(filename):

    with open(filename, 'r') as f:
        data = [int(line.split()[2]) for line in f]
        return sum(data)/len(data)


    avg =  avg_file(filename)

    return avg


#main program:

import q3_function

filename = "testing.txt"

average = q3_function.avg_file(filename)

print (average)

【问题讨论】:

  • 如果你的文件中有空行(只有\n),你会得到索引异常
  • 如何通过查看文件(不使用计算机)来确定最大值或最小值?
  • 不使用电脑?只需查看它并获取最低和最高值。

标签: python python-3.x


【解决方案1】:

您可以使用列表推导来获取所需的 ID 和分数对:

>>>l= [i.split(',')[-2:] for i in open(filename, 'r') if not i=='\n']
[['820000000', '92'], ['820000095', '54'], ['820000046', '68'], ['820000023', '73'], ['820000037', '71']]

然后为了计算平均值,您可以在 mapsum 函数中使用 zip

>>> avg=sum(map(int,zip(*l)[1]))/len(l)
>>> avg
71

对于 minmax 使用 built-in functions minmax 并使用正确的密钥:

max_id=max(l,key=itemgetter(1))[0]
min_id=min(l,key=itemgetter(1))[0]

演示:

>>> from operator import itemgetter
>>> max(l,key=itemgetter(1))
['820000000', '92']
>>> max(l,key=itemgetter(1))[0]
'820000000'
>>> min(l,key=itemgetter(1))[0]
'820000095'
>>> min(l,key=itemgetter(1))
['820000095', '54']
>>> min(l,key=itemgetter(1))[0]
'820000095'

【讨论】:

  • max 和 min 函数倒置 ;) 820000095 > 820000000。我认为关键是 0,而不是 1:max(l,key=itemgetter(0))
  • @LoïcG。它只是身份证!
  • 哦,对不起,我误会了,我拿了身份证来评分。顺便说一句,漂亮的 sn-p ;)
【解决方案2】:

我认为使用 python csv 模块会有所帮助。 这里有几个例子:http://nbviewer.ipython.org/github/rasbt/python_reference/blob/master/tutorials/sorting_csvs.ipynb

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多