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

如何在Python中对txt文件的数据进行排序,python,sorting,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按生产商的名

我的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()
如何做到这一点?

您可以使用列表的方法:

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循环中使用不同的变量名,以避免与设备混淆。而且,如果您想按另一列进行排序,则需要在循环并打印设备之前将每行设备拆分为一个列表。您可能需要两个循环来打印原始循环,以及一个while循环来处理准备排序的每一行

旁注:对于这个用例,使用不带任何参数的.strip会更安全,因为这将捕获前导/尾随空格,并且如果文件恰好有“\r\n”样式的行结尾,则会删除它们

另外,因为您知道每行的列表总是相同的格式,所以您可以使用.format*设备来创建,它可能更短或更整洁。

试试这个

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()

如果你只是将所有字符串读入一个字符串列表,然后调用排序,而不使用键、拆分等,那么列表将按设备排序。是的,这将完成任务。实际上,我必须选择排序键、代码、名称或生产者。所以,如果我选择按生产商名称从A到Z排序,那么它将在设备代码表regadles中打印设备。我只是想,如果我知道如何按代码排序,我也知道如何按其他参数排序汉克有很多。你救了我。这正是我想要的。这就是具体的答案。