我有看起来像这样的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()
怎么做?
答案 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,这可能更短或更整洁。