找到最多3个分数然后将最大值写入文本文件

时间:2014-12-29 10:15:17

标签: python string sorting text python-3.4

我将使用此代码按降序对分数进行排序。

我计划将两者定义为函数并在需要时使用它们,在第一个print函数之后开始的第二段代码将找到文本文件的最大值。然后我希望它将此值保存到新的文本文件中。

然而,每当我尝试这样做时,它都会给我一个错误信息,我必须能够保留附加到该号码的字符串,这样老师才能识别出它的分数。

import operator

sort_key = operator.itemgetter(0)

with open('3a.txt','r') as fo:
    split_lines = (line.split(None, 1) for line in fo)
    numeric_lines = ((int(line[0]), line[1]) for line in split_lines)
    sorted_x = sorted(numeric_lines, key=sort_key, reverse=True)

print(sorted_x)

with open('3a.txt','r') as fo:
    split_lines = (line.split(None, 1) for line in fo)
    numeric_lines = ((int(line[0]), line[1]) for line in split_lines)
    sorted_x = max(numeric_lines, key=sort_key)
    sorted_x = list(sorted_x)
with open('1a.txt') as fo:
    fo.write(str(sorted_x))


print(sorted_x)

我的文字文件如下所示

8 Thomas
4 Thomas
7 Thomas

基本上我需要在测验中找到最多3个人的最后3个分数,然后按降序对它们进行比较。

错误消息:

fo.write(str(sorted_x))
io.UnsupportedOperation: not writable

1 个答案:

答案 0 :(得分:2)

您收到错误是因为文件1a.txt不存在,并且因为您没有指定模式open() Python尝试在读取时打开它模式。所以你只需要在'w'模式下打开它。

我假设您希望使用与输入数据类似的格式编写新文件。所以试试这个:

import operator

sort_key = operator.itemgetter(0)    
#sort_key = lambda s:s[0]

with open('3a.txt','r') as fo:
    split_lines = (line.split(None, 1) for line in fo)
    numeric_lines = ((int(line[0]), line[1]) for line in split_lines)
    sorted_x = sorted(numeric_lines, key=sort_key, reverse=True)

print(sorted_x)

with open('3a.txt','r') as fo:
    split_lines = (line.split(None, 1) for line in fo)
    numeric_lines = ((int(line[0]), line[1]) for line in split_lines)
    sorted_x = max(numeric_lines, key=sort_key)
    #sorted_x = list(sorted_x)

print(sorted_x)    

with open('1a.txt','w') as fo:
    fo.write('{0} {1}'.format(*sorted_x))

我已添加了一项不需要您导入sort_key的备用operator功能。另外,我注释掉sorted_x = list(sorted_x)行,因为它不是必需的,并且元组优先于不可变数据的列表。