如何在python中对file.txt的内容进行数字排序

如何在python中对file.txt的内容进行数字排序,python,sorting,Python,Sorting,因此,我目前正在整理一个文本文件中的分数及其对应的名称。此代码以数字方式对代码进行排序,但也会打印出\t和\n。我是一个初学者,我几乎不能把我的头绕起来。strip and item.rsplit 我没有\t在文件中留出空间,并\n将新输入附加到新行上。我想让它看起来像名字和分数是分开的列,这是正确的吗?有没有一种更简单的方法来分离2,并能够对分数进行数字排序 任何帮助都将不胜感激 name= input('What is your name?: ') score=input ('What is

因此,我目前正在整理一个文本文件中的分数及其对应的名称。此代码以数字方式对代码进行排序,但也会打印出\t和\n。我是一个初学者,我几乎不能把我的头绕起来。strip and item.rsplit

我没有\t在文件中留出空间,并\n将新输入附加到新行上。我想让它看起来像名字和分数是分开的列,这是正确的吗?有没有一种更简单的方法来分离2,并能够对分数进行数字排序

任何帮助都将不胜感激

name= input('What is your name?: ')
score=input ('What is your score?: ')

a=(name)
b=(score)

file = open("newfile.txt", "a")
file.write (a + '\t' + b+'\n')
file.close()

sorting=('How would you like to sort the scores?: \n\
1. Ascending \n')

sortchoice = int(input(sorting))
if sortchoice ==1:
    with open("newfile.txt", 'r') as file:
        sorted_data=sorted(file.readlines(),
                           key=lambda item: int(item.rsplit("\t",1)[-1].strip()))
        print (sorted_data)
像这样的

name = input('What is your name?: ')
score = input ('What is your score?: ')

with open("newfile.txt", "a") as f:
    f.write (name+'\t'+score+'\n')


sorting = ('How would you like to sort the scores?: \n\
1. Ascending \n')    
sortchoice = int(input(sorting))

if sortchoice ==1:
    with open("newfile.txt", 'r') as f:
        data = [i.strip() for i in f if i.strip() != '']
        sorted_data = sorted(data, key=lambda x: int(x.split('\t')[1]))
        for i in sorted_data:
            print(i)
首先,

data = [i.strip() for i in f if i.strip() != '']
返回类似于

['Foo\t23', 'Bar\t33', 'Baz\t10', 'foo\t222', 'bar\t11111', 'qwe\t0001']
如您所见,这些是文件内容,按
\t
拆分。因此,我们使用:

sorted_data = sorted(data, key=lambda x: int(x.split('\t')[1]))
x.split('\t')
给出类似于
['Foo',23']
,然后我们使用slice
[1]
来获得
'23'

最后,使用
int('23')
作为排序键。

您可以在创建
排序的\u数据之后,使用
“.join()
将选项卡字符
\t
上的新行
\n
拆分()
,然后使用
”.join()
将拆分的字符串重新连接在一起,用空格字符分隔。然后您可以再次打印它:

with open("newfile.txt", "r") as f:
    sorted_data = sorted(f.readlines(), key=lambda item: int(item.strip().split("\t")[-1]))
    sort = [" ".join(line.strip().split("\t")) for line in sorted_data]
    print(sorted)
对于一些真正随机的数据,这将打印:

['ki 332', 'kokp 2112', 'ko 2121']

当然,这只是打印列表的结果,而不是它的内容。因此,它无法使用它的
\t
\n
格式化打印文本

您可以轻松打印输入的每一行,方法是:

with open("newfile.txt", "r") as f:
    sorted_data = sorted(f.readlines(), key=lambda item: int(item.strip().split("\t")[-1]))

     # No need for extra splitting and stripping now.
     # sort = [" ".join(line.strip().split("\t")) for line in sorted_data]

    for line in sorted_data: 
        print(line)
它现在打印:

ki      332

kokp    2112

ko      2121

此外,此处的括号为:

a=(name)
b=(score)

真的没有实际意义,你可以用同样的效果做
a=name
b=score

这看起来不错。然而,我想指出的是,由于你的程序可以运行,所以我不会这么做。哦,哇,我不知道这一点,这实际上很有帮助,非常感谢。很抱歉给你带来不便,但你能解释一下这是如何工作的吗?因此lambda组成了一个短函数,将文件中的两个内容拆分为两个列表。-1是二进制的,选择第二个列表?这实际上是如何分类的?事先我很抱歉,虽然我只是想知道如何添加,如何颠倒从最高到最低的顺序,但代码工作得很好。谢谢。
lambda
函数提取文件中的每一行,剥离
\n
,然后在
\t
上拆分。拆分后,我们得到一个包含两个值的
列表
[名称,分数]
;使用
[-1]
我们为该
列表编制索引
并获得
分数
。此分数由负责排序的
排序
函数用作
(使用自己的排序算法)。如果您想反转排序顺序,实际上非常简单,在调用
sorted()
时添加一个
reverse=True
参数:
sorted(f.readlines(),key=lambda item:int(item.strip().split(“\t”)[-1]),reverse=True)
非常感谢您,这帮了大忙。我现在真的明白了,非常感谢你。