python根据每行末尾的int值对文本文件中的行进行排序

时间:2017-01-11 10:26:02

标签: python file sorting lines

我有一个像这样的大文本文件:

train/1175-c/b0a5.bmp 45221
train/1175-c/b0a4.bmp 45220
train/1176-c/b0a4.bmp 45220
train/1176-c/b0a6.bmp 45222
train/1175-c/b0a1.bmp 45217
train/1173-c/b0a2.bmp 45218
train/1175-c/b0aa.bmp 45226
train/1172-c/b0a3.bmp 45219
train/1177-c/b0a4.bmp 45220
train/1177-c/b0a1.bmp 45217
train/1176-c/b0a1.bmp 45217
train/1178-c/b0a1.bmp 45217
train/1175-c/b0a8.bmp 45224
train/1175-c/b0a9.bmp 45225
train/1175-c/b0a7.bmp 45223

我想按照以下方式对其进行排序并保存新文件?基于每行中的最后一个int值进行排序。

train/1178-c/b0a1.bmp 45217
train/1177-c/b0a1.bmp 45217
train/1176-c/b0a1.bmp 45217
train/1175-c/b0a1.bmp 45217
train/1173-c/b0a2.bmp 45218
train/1172-c/b0a3.bmp 45219
train/1175-c/b0a4.bmp 45220
train/1176-c/b0a4.bmp 45220
train/1177-c/b0a4.bmp 45220
train/1175-c/b0a5.bmp 45221
train/1176-c/b0a6.bmp 45222
train/1175-c/b0a7.bmp 45223
train/1175-c/b0a8.bmp 45224
train/1175-c/b0a9.bmp 45225
train/1175-c/b0aa.bmp 45226

1 个答案:

答案 0 :(得分:2)

编写一个函数并将其作为key关键字参数传递给sorted

def trailing_digits(string):
    return int(string.split()[-1])

iterable = '''train/1175-c/b0a5.bmp 45221
train/1175-c/b0a4.bmp 45220
train/1176-c/b0a4.bmp 45220
train/1176-c/b0a6.bmp 45222
train/1175-c/b0a1.bmp 45217
train/1173-c/b0a2.bmp 45218
train/1175-c/b0aa.bmp 45226
train/1172-c/b0a3.bmp 45219
train/1177-c/b0a4.bmp 45220
train/1177-c/b0a1.bmp 45217
train/1176-c/b0a1.bmp 45217
train/1178-c/b0a1.bmp 45217
train/1175-c/b0a8.bmp 45224
train/1175-c/b0a9.bmp 45225
train/1175-c/b0a7.bmp 45223'''.split('\n')

for x in sorted(iterable, key=trailing_digits):
    print(x)