【2019.08.06 Python每日一题】答案 —— 求和和求平均from文件中数据

def file_sum_mean(filename):
    with open(filename,'r+') as f:
        ls = [line.strip().split(',') for line in f] #读取文件内容,形成两层列表嵌套

        # 分别把三列数据写进三个列表里,也可以写一个循环,格式化这个过程
        ls_height = [int(line[1]) for line in ls[1:]]
        ls_weight = [int(line[2]) for line in ls[1:]]
        ls_shiliang = [int(line[3]) for line in ls[1:]]
        ls_shabiIndex = [int(line[4]) for line in ls[1:]]

        # 把上述列表放入一个列表ls_ls里,方便遍历
        ls_ls = [ls_height,ls_weight,ls_shiliang,ls_shabiIndex]

        #计算sum值,放到一个列表里sum_ls,再合并成一个用逗号分隔,\n结尾的字符串sum_str,方便写入文件
        sum_ls = [round(sum(ls)) for ls in ls_ls]
        sum_str = ','.join(list(map(str,sum_ls))) + '\n'

        #计算mean值,放到一个列表里
        mean_ls = [str(round(value/3)) for value in sum_ls]
        mean_str = ','.join(mean_ls) + '\n'

        #写入文件,注意,先加一个回车,因为原文件最后一行没有回车
        f.write('\n')
        f.write('Sum,'+ sum_str)
        f.write('Mean,' + mean_str)

filename = r'C:/Users/kongy/Desktop/input_file_20190806.csv'
file_sum_mean(filename)

解法二:(与解法一的区别 原行5-12被更改为 新行5-12,此加入了批量生成列表的做法)

def file_sum_mean(filename):
    with open(filename,'r+') as f:
        ls = [line.strip().split(',') for line in f] #读取文件内容,形成两层列表嵌套

        # 分别把三列数据写进三个列表里,用第一行的列名为新列表命名,并将新生成的三个列表放入ls_ls
        name_ls = [(index,name) for index,name in enumerate(ls[0])]
        #批量赋值列表
        ls_ls = []
        for i,name in name_ls[1:]:
            globals()[name] = [int(line[i]) for line in ls[1:]]
            ls_ls.append(globals()[name])


        #计算sum值,放到列表sum_ls里,再合并成用逗号分隔,\n结尾的字符串sum_str,方便写入文件
        sum_ls = [round(sum(ls)) for ls in ls_ls]
        sum_str = ','.join(list(map(str,sum_ls))) + '\n'

        #计算mean值,放到列表mean_ls,再合并成用逗号分隔,\n结尾的字符串mean_str,方便写入文件
        mean_ls = [str(round(value/3)) for value in sum_ls]
        mean_str = ','.join(mean_ls) + '\n'

        #写入文件,注意,先加一个回车,因为原文件最后一行没有回车
        f.write('\n')
        f.write('Sum,'+ sum_str)
        f.write('Mean,' + mean_str)

filename = r'C:/Users/kongy/Desktop/input_file_20190806.csv'
file_sum_mean(filename)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值