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

时间:2015-11-11 02:29:03

标签: python sorting

所以我目前正在研究文本文件中的分数及其相应的名称。此代码以数字方式对代码进行排序,但也打印出\ t和\ n。我是初学者,我几乎无法绕过.strip和item.rsplit。

我没有在文件中创建空格,而是在新行上添加新输入。我想让它看起来像名字和分数在列中分开,这是正确的吗?是否有一种更简单的方法来分离2并能够以数字方式对分数进行排序?

非常感谢任何帮助。

double[]

2 个答案:

答案 0 :(得分:0)

这样的东西?

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']的内容,然后我们使用切片[1]来获取'23'

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

答案 1 :(得分:0)

创建strip()之后,您可以\n选项卡字符split()上的新行\tsorted_data,然后使用" ".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']

当然,这只是print()打印list的结果,而不是它的内容。因此,它无法使用它\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 = nameb = score具有相同的效果。