如何将infi中数据的平均值写入out文件

2024-03-29 10:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我目前的代码:

infileName="data.txt"
inFile=open(infileName,"r")
outfileName="avg.txt"
outFile=open(oufileName,"w")
for line in infile:
    test=line.split()
    first_name=test[0]
    last_name=test[1]
    first_initial=first_name[0]
grades=test[2:]

我不知道从这里该怎么办。你如何计算每一行的平均数?你知道吗

这是填充data.txt

betty smith 60 100 80 
john williams 50 100 
sue mason 20 30 40 60 50 

这应该是outfile avg.txt的结果:

smith,b:80.0 
williams,j:75.0 
mason,s:50.0 – 

Tags: 代码nametesttxtdatalineopeninfile
3条回答

刚刚更正了您的代码以在输出中打印所需的结果文件:-你知道吗

def add(a,b): 
    return a+b

infileName="data.txt"
inFile=open(infileName,"r")
outfileName="avg.txt"
outFile=open(outfileName,"w")
for line in inFile.readlines():
    test=line.split()
    first_name=test[0]
    last_name=test[1]
    first_initial=first_name[0]
    no_list = map(float, test[2:])
    avg = float(reduce(add, no_list))/len(no_list)
    outFile.write("%s %s %s\n"%(first_name, last_name, str(avg)))

您可以使用列表:

>>> [j[1]+','+j[0][0]+':'+str(sum(map(float,j[2:]))//(len(j)-2)) for j in [line.split() for line in open('in_file')]]
['smith,b:80.0', 'williams,j:75.0', 'mason,s:40.0']

在这个列表中,首先我们需要在文件上循环并拆分行,这样我们将得到以下结果:

[line.split() for line in open('in_file')]
[['betty', 'smith', '60', '100', '80'], ['john', 'williams', '50', '100'], ['sue', 'mason', '20', '30', '40', '60', '50']]

现在我们需要循环这个列表,重要的部分是计算平均值,所以首先我们知道数字是从第二个索引到结尾的,所以我们需要将这个数字转换成float,它可以用map函数完成,然后计算和,然后用len-2除法。你知道吗

sum(map(float,j[2:]))//(len(j)-2))

你想要的解决办法是。。。?你知道吗

inFilename = "data.txt"
with open(inFilename, "r") as inFile:
    for line in inFile.readlines():
        test = line.split()
        first_name = test[0]
        last_name = test[1]
        first_initial = first_name[0]
grades = map(float, test[2:])
outfileName = "avg.txt"
with open(outfileName, 'w') as outFile:
    buffer = sum(grades)/len(grades)
    buffer = '{},{}:{}'.format(first_initial, last_name, buffer)
    outFile.write(buffer)

相关问题 更多 >