Python初学者。 如何显示文件中的数据并计算每个人的总数/平均值? 如何在每次迭代中将值添加到for之外的变量,并且一旦迭代超过记录数量?
由于用户可以添加和删除数据,因此文件中的数据会有所不同,但数据结构如下:
PersonA;342;454;559;
PersonB;444;100;545;
PersonC;332;567;491;
PersonD;142;612;666;
我想这样呈现:
PersonA 342 454 559 TOTAL AVERAGE
PersonB 444 100 545 TOTAL AVERAGE
PersonC 332 567 491 TOTAL AVERAGE
PersonD 142 612 666 TOTAL AVERAGE
在此之后我还能写些什么才能做到正确?
def show_result():
text_file = open('result.txt', 'r')
for line in text_file:
if ';' in line:
line2 = line.split(";")
print line2
with open("input.txt") as f:
for line in f:
s = """PersonA;342;454;559;
PersonB;444;100;545;
PersonC;332;567;491;
PersonD;142;612;666;"""
for line in s.split("\n"):
p, a, b, c, _ = line.strip().split(";")
print("{}\t{}\t{}\t{}\t{}\t{}".format(p, a, b, c,
sum([int(a), int(b), int(c)]),
sum([int(a), int(b), int(c)]) / 3))
溶液:
def show_result():
text_file = open('minigolf.txt', 'r')
print "Name,Round1,Round2,Round3"
for line in text_file:
if ';' in line:
line2 = line.split(";")[:-1]
print line2
line_total = sum(map(int, line2[1:]))
line_average = line_total / len(line2[1:])
print "Total: ", line_total
print "Average: ", line_average
答案 0 :(得分:2)
snapshot.exists()
输出:
s = """PersonA;342;454;559;
PersonB;444;100;545;
PersonC;332;567;491;
PersonD;142;612;666;"""
for line in s.split("\n"):
p, a, b, c, _ = line.strip().split(";")
print("{}\t{}\t{}\t{}\t{}\t{}".format(p, a, b, c,
sum([int(a), int(b), int(c)]),
sum([int(a), int(b), int(c)]) / 3))
修改强>
如果要从文件中读取,可以执行以下操作:
PersonA 342 454 559 1355 451.6666666666667
PersonB 444 100 545 1089 363.0
PersonC 332 567 491 1390 463.3333333333333
PersonD 142 612 666 1420 473.3333333333333
答案 1 :(得分:0)
要计算你可以做的total
(假设你不想包含第一个索引,其中包含“PersonA”等):
line_total = sum(map(int, line2[1:]))
从那里,平均值也很简单:
line_average = line_total / len(line2[1:])
说明:
sum
函数接受一个iterable(为了我们的目的将iterable视为一个列表)并使用适当的sum函数添加其所有内容。
[1:]
称为列表拼接。使用此语法,您告诉Python您要创建一个新列表,其中包含从1
位置开始的原始列表的内容。以下是几个例子:
>>> a = [1, 2, 3]
>>> b = [1:]
>>> b
[2, 3]
具体语法如下:[start_index : end_index]
start_index
或end_index
可以留空,Python将分别填入列表的开头或结尾。
答案 2 :(得分:0)
我会这样做。也就是说,有很多方法可以在Pyhton中完成。
import pandas as pd
df = pd.read_csv('result.txt', sep=';',header=None)
del df[4]
df['AVERAGE'] = df[[1,2,3]].mean(axis = 1)
df['TOTAL'] = df[[1,2,3]].sum(axis = 1)
我使用pandas库进行此类操作。
输出:
0 1 2 3 AVERAGE TOTAL
0 PersonA 342 454 559 451.666667 1355
1 PersonB 444 100 545 363.000000 1089
2 PersonC 332 567 491 463.333333 1390
3 PersonD 142 612 666 473.333333 1420
答案 3 :(得分:0)
这适用于每个人和任何人数的任何值:
from collections import defaultdict
def myprint(lines):
sum_dict = defaultdict(lambda: ([], 0, 0))
for line in lines:
data = line.strip().split(";")
person = data[0].strip()
values = [int(i) for i in data[1:] if i]
sum_dict[person] = (values + sum_dict[person][0], sum(values)+sum_dict[person][1], len(values)+sum_dict[person][2])
for person in sorted(sum_dict):
values, total, nb = sum_dict[person]
print "{}\t{}\t{}\t{}".format(person, '\t'.join([str(i) for i in values]), total, total/nb)
if __name__ == '__main__':
import os
if os.path.exists('result.txt'):
with open('result.txt') as input:
lines = input.readlines()
else:
s = """PersonA;342;454;559;
PersonB;444;100;545;
PersonC;332;567;491;
PersonD;142;612;666;"""
lines = s.split('\n')
myprint(lines)