我将使用此代码按降序对分数进行排序。
我计划将两者定义为函数并在需要时使用它们,在第一个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
答案 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)
行,因为它不是必需的,并且元组优先于不可变数据的列表。