如何在Python中对txt文件的数据进行排序

时间:2017-06-09 02:08:51

标签: python sorting

我有看起来像这样的devices.txt文件:

tw004:Galaxy S5:Samsung:Mobilni telefon:5
tw002:Galaxy S6:Samsung:Mobilni telefon:1
tw001:Huawei P8:Huawei:Mobilni telefon:4
tw003:Huawei P9:Huawei:Mobilni telefon:3

现在,我有这样的代码,我必须选择如何对表中的设备进行排序(例如,按照从tw001到tw004的代码对它们进行排序,或者按生产者的名称从A到Z对它们进行排序)

def formatheader():
        print(
    "Code |    Name    |  Producer  |       Description       |  Quantity   |\n"
    "-----+------------+------------+-------------------------+-------------|")

def sortbycode():
    devices = open('devices.txt', 'r')
    formatheader()
    for i in devices:
        devices = i.strip("\n").split(":")
        print("{0:5}|{1:13}|{2:15}|{3:18}|{4:5}".format(    
            devices[0],
            devices[1],
            devices[2],
            devices[3],
            devices[4]))
    print()

怎么做?

2 个答案:

答案 0 :(得分:1)

试试这个。

def formatheader():
        print(
    "Code |    Name     |   Producer    |     Description  |  Quantity   |\n"
    "-----+-------------+---------------+------------------+-------------|")

def sortbycode():
    device_file = open('devices.txt', 'r')
    formatheader()
    devices = []
    for line in device_file:
        devices.append([i  for i in line.strip("\n").split(":")])
    devices.sort(key=lambda x:x[0])
    for device in devices:
      print("{0:5}|{1:13}|{2:15}|{3:18}|{4:5}".format(*device))
sortbycode()

答案 1 :(得分:0)

您可以使用列表的.sort方法:

devices.sort()
# or if you want to sort by another field, use a key function
devices.sort(key=lambda x:int(x[4])) # sort by integer value of quantity

您应该在for循环中使用其他变量名称,以避免弄乱devices。并且,如果要按其他列进行排序,则需要在循环并打印它们之前将devices的每一行拆分为一个列表。您可能需要两个循环(原始for循环打印,while循环处理每一行准备排序)

附注:对于这个用例,使用不带任何参数的.strip()将更安全,因为它将捕获前导/尾随空格,以及删除'\r\n'样式行结尾(如果文件如此碰巧有了它们。)

此外,由于您知道每行的列表将始终采用相同的格式,因此您可以.format(*devices)使用unpack the list to arguments,这可能更短或更整洁。