目前我正试图用排序系统解决一些问题,正如您在回答我的其他问题时所说的那样。如果你也需要的话,你可以在那里找到一些信息。
我的问题是,我想要一个秩序井然的分拣系统,而我似乎已经打破了这个系统。
我有一个txt文件,其中包含以下数据:
亚历克斯8
约翰4
Reece 7
亚历克斯8
Rebecca 2
**新的排序方法仍然不起作用**
def sortNumeric(fileName, i, toWrite):
with open(fileName, 'r') as inFile:
pairs = sorted((l.strip().split() for l in inFile),
key=operator.itemgetter(1))
with open(fileName, 'w') as outFile:
outFile.write(os.linesep.join(p[0] + ' ' + p[1] for p in pairs))
它当前将此写入文件:
Reece0John
甚至不包括约翰的分数或任何东西
我需要把它写成这样的文件:
丽贝卡2
约翰3
Reece 7
亚历克斯8
Alex 8
所以向下而不是在一条线上。如果对我的分拣系统有任何帮助或改进,我们将不胜感激。
以防我程序的其他部分搞砸了。。。这就是整件事!
代码
问题出在这一行:
"n".join(name_score[0] + " " + name_score[1] for name_score in pairs)
因为联接的结果没有分配给任何东西。
您应该在该行前面加上pairs =
:
pairs = "n".join(name_score[0] + " " + name_score[1] for name_score in pairs)
不确定所有这些替换(和截断)是为了什么。。
import os
def mykey(item):
int(item[1])
def sortNumeric(fileName, i, toWrite):
with open(fileName, 'r') as inFile:
pairs = sorted((l.strip().split() for l in inFile),
key=mykey)
with open(toWrite, 'w') as outFile:
outfile.write(os.linesep.join(p[0] + ' ' + p[1] for p in pairs))
作为一个简短的(非文件)示例。。
>>> infile = ['Alex 8', 'John 4', 'Reece 7', 'Alex 8', 'Rebbecca 2']
>>> pairs = sorted((l.strip().split() for l in infile),
... key=mykey)
>>> os.linesep.join(p[0] + ' ' + p[1] for p in pairs)
'Rebbecca 2nJohn 4nReece 7nAlex 8nAlex 8'
>>> print(os.linesep.join(p[0] + ' ' + p[1] for p in pairs))
Rebbecca 2
John 4
Reece 7
Alex 8
Alex 8
>>>
只要让整个str()
的东西,你不需要它:
def sortNumeric(fileName, toWrite):
pairs = [l.strip().split(" ") for l in open(fileName, "r")]
pairs.sort(key = lambda name_score: int(name_score[1]))
f = open(toWrite, "w")
f.write("n".join(name_score[0] + " " + name_score[1] for name_score in pairs))
f.close()