Python操作txt文件

已知“score”文件夹下score.txt中保存有十个评委对三个候选人的打分情况从左到右各个字段的含义分别为:评委号、1号候选人得分、2号得分、3号候选 人得分,各字段之间用逗号分隔。
例如
Judge1,75,85,81
Judge2,84,87,76

要求设计 Python程序:①读取该txt 文件,将每个候选人的得分去掉一个最高分和- 个最低分:②计算剩余得分的平均数作为该候选 人最终成绩:③找出;最终成绩最高的候选 人的编号及最终成绩,分别输出到 socre 文件爽 下score.xlsx 文件的score 工作簿中 A1 和 BI 单元格

这个txt文件实质为一个以逗号分隔的CSV格式文件,所以可以用pandas来处理数据,根据题意,评委ID在数据处理中没有实际意义,所以提取中就可以忽略

import  pandas as  pd 
import xlwt

def takeSecond(elem):# 排序时取第2个元素来比较处理
    return elem[1]

datas=pd.read_csv('data.txt', usecols=[1,2,3] ,header=None) # 从文件中读取数据
rt=[]
for i in range(3): # 计算每个候选人的对应成绩
    dataList=datas[datas.columns[i]]
    rt.append(["{}号候选人".format(i+1), (dataList.sum()-dataList.max()-dataList.min())/8])

rt.sort(key=takeSecond,reverse=True) #排序元素,从高到低 
wb = xlwt.Workbook() # 后面都是excel文件写入处理
sheet1 = wb.add_sheet('score')
sheet1.write(0,0,rt[0][0])
sheet1.write(0,1,rt[0][1])
wb.save('score.xls')
import xlwt
with open('scores.txt', 'r') as f:
    scores = [line.strip().split(',') for line in f.readlines()]
    scores = [[int(scores[j][i]) for j in range(len(scores))]for i in range(1,4)]
    result = []
    for s in scores:
        s.sort()
        s.remove(min(s))
        s.remove(max(s))
        result.append(sum(s)/len(s))
    no = result.index(max(result))+1
    grade = max(result)
    print(no,grade)
    wb = xlwt.Workbook()
    sheet1 = wb.add_sheet('score')
    sheet1.write(0,0,no)
    sheet1.write(0,1,grade)
    wb.save('score.xls')
dirname = r'C:\Users\Administrator\Desktop'

import pandas as pd

names = ['TEACH', 'ONE', 'SECOND', 'THREE']
types = {'TEACH': str,'ONE':int, 'SECOND':int, 'THREE':int}
df = pd.read_csv(dirname + "/score.txt", names =names,dtype = types )

def fun(ser):
    l = ser.to_list()
    l.remove(max(l))
    l.remove(min(l)) 
    return sum(l) / len(l)

dic = df[["ONE", 'SECOND', 'THREE']].apply(fun).to_dict()
dd = max(dic.items(), key = lambda x: x[1])
dff = pd.DataFrame(data = {'A': [dd[0]], 'B': [dd[1]]})
dff.to_excel(dirname + "/score.xlsx", index = False, header = False)

import xlwt
with open('scores.txt', 'r') as f:
scores = [line.strip().split(',') for line in f.readlines()]
scores = [[int(scores[j][i]) for j in range(len(scores))]for i in range(1,4)]
result = []
for s in scores:
s.sort()
s.remove(min(s))
s.remove(max(s))
result.append(sum(s)/len(s))
no = result.index(max(result))+1
grade = max(result)
print(no,grade)
wb = xlwt.Workbook()
sheet1 = wb.add_sheet('score')
sheet1.write(0,0,no)
sheet1.write(0,1,grade)
wb.save('score.xls')

你题目的解答代码如下:

import xlwt
scores = [[],[],[]]
with open('scores.txt', 'r') as f:
    for line in f.readlines():
        li = line.strip().split(',')
        for i in range(3):
           scores[i].append(float(li[i+1]))
value=0
num=0
for i, v in enumerate(scores):
    r = (sum(v)-max(v)-min(v))/(len(v)-2)
    if r > value:
        num = i+1
        value = r
print(num,value)
wb = xlwt.Workbook()
sheet1 = wb.add_sheet('score')
sheet1.write(0,0,num)
sheet1.write(0,1,value)
wb.save('score.xls')

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img