【问题标题】:How to write into an out file the averages of the data in the infile如何将输入文件中数据的平均值写入输出文件
【发布时间】:2015-03-23 06:25:30
【问题描述】:

这是我目前的代码:

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:]

我不知道从这里做什么。你如何取每行的平均值?

这是infile data.txt:

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

这应该是输出文件avg.txt上的结果:

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

【问题讨论】:

  • 这是 infile 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 威廉姆斯,j:75.0 梅森,s:50.0
  • 你知道计算平均值的公式吗?
  • 欢迎来到 StackOverflow。您似乎首先需要阅读一本好书或教程来获得编程基础知识。该网站无法提供此类帮助。见How to Ask
  • 是的,但每个人的测试次数不同

标签: python list file loops file-io


【解决方案1】:

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

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)))

【讨论】:

    【解决方案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)
    

    【讨论】:

      【解决方案3】:

      您可以使用列表推导:

      >>> [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))
      

      【讨论】:

      • 感谢您的帮助。但我对你的答案是如何格式化的感到困惑。意味着我将在哪里实现这个
      • 有没有机会像上面的答案一样写出来?
      • 你可以写成其他形式,但使用列表推导效率更高!
      【解决方案4】:

      试试这个:

      infileName="data.txt"
      inFile=open(infileName,"r")
      outfileName="avg.txt"
      outFile=open(outfileName,"w")
      for content in [line.strip().split(' ') for line in inFile]:
          print '{0}, {1}: {2}'.format(content[1], content[0][0], sum([int(number) for number in content[2:]]) / len(content[2:]))
      

      输出:

      smith, b: 80
      williams, j: 75
      mason, s: 40
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 2014-10-18
        • 2016-03-18
        • 2016-07-13
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多