如何获取文件中每一行的第一个元素并对其进行排序?

时间:2019-01-03 17:33:04

标签: python python-3.x

我有一个具有以下内容的file.txt:

('sim', 'sim','03-01-19', 'sim','Fechada', 'sim')

('ano', 'a', '02-01-19', 'a', 'Aberta', 'a')

('pano', 's', '01-01-19', 's', 'Aberta', 's')

我想这样排序:

('ano', 'a', '02-01-19', 'a', 'Aberta', 'a')

('pano', 's', '01-01-19', 's', 'Aberta', 's')

('sim', 'sim','03-01-19', 'sim','Fechada', 'sim')

还按如下日期对它进行排序:

('pano', 's', '01-01-19', 's', 'Aberta', 's')

('ano', 'a', '02-01-19', 'a', 'Aberta', 'a')

('sim', 'sim','03-01-19', 'sim','Fechada', 'sim')

如果有人可以帮助我,我将非常感激:)

抱歉我的英语不好

def ordenar():
    ficheirocompra = open("compras.txt","r")
    lines = ficheirocompra.readlines()

    for line in lines:
        a = line[0:line.find(',')]
        print(a.sort())

    ficheirocompra.close()

1 个答案:

答案 0 :(得分:0)

如果您已经有一个元组列表,并且想要按每个元组的第一项进行排序,那么.sorted.sort将完成这项工作。请记住,.sort对列表本身进行排序,而.sorted返回已排序的列表。

>>> L = [('sim', 'sim','03-01-19', 'sim','Fechada', 'sim'),
...      ('ano', 'a', '12-01-19', 'a', 'Aberta', 'a'),
...      ('zoom', 'z', '05-01-19', 'z', 'Yo', 'z'),
...      ('pano', 'zz', '01-01-19', 's', 'Aberta', 's')]
>>> L_namesort = sorted(L)
>>> print(L_namesort)
[('ano', 'a', '12-01-19', 'a', 'Aberta', 'a'), ('pano', 'zz', '01-01-19', 's', 'Aberta', 's'), ('sim', 'sim', '03-01-19', 'sim', 'Fechada', 'sim'), ('zoom', 'z', '05-01-19', 'z', 'Yo', 'z')]

另一种方法是使用key参数并选择要排序的项目。

def mysortingkey(item):
    return item[0]

L = [('sim', 'sim','03-01-19', 'sim','Fechada', 'sim'),
     ('ano', 'a', '12-01-19', 'a', 'Aberta', 'a'),
     ('zoom', 'z', '05-01-19', 'z', 'Yo', 'z'),
     ('pano', 'zz', '01-01-19', 's', 'Aberta', 's')]

L_namesort = sorted(L, key=mysortingkey)
print(L_namesort)

您可以使用相同的策略按日期排序,尽管这意味着将日期字符串转换为实际的datetime日期。否则,像“ 12-25-18”之类的日期将被认为比“ 01-03-19”“晚”。

import datetime

def thedatesort(item):
    return datetime.datetime.strptime(item[2], '%m-%d-%y')

L = [('sim', 'sim','03-01-19', 'sim','Fechada', 'sim'),
     ('ano', 'a', '12-01-19', 'a', 'Aberta', 'a'),
     ('zoom', 'z', '05-01-19', 'z', 'Yo', 'z'),
     ('pano', 'zz', '01-01-19', 's', 'Aberta', 's')]

L_datesorted = sorted(L, key=thedatesort)
print(L_datesorted)