根据 header python 的名称和数量订购原料

order raws based on name and number of header python

我有一个 csv 文件,其中包含不同大小的原始文件,其中包含值和每个原始文件的 header。

00_A1_s1
00_A1_s2
00_A1_s3
04_A1_s1
04_A1_s2
04_A1_s3
08_A1_s1
08_A1_s2
08_A1_s3

我想按名称对原料进行分组,然后按坐标前的数字排序

00_A1_s1
04_A1_s1
08_A1_s1
00_A1_s2
04_A1_s2
08_A1_s2
00_A1_s3
04_A1_s3
08_A1_s3

谢谢!

您可以使用带有 key 参数的 sort 内置函数,它接受一个函数,您可以在其中推断元素的顺序条件。它 returns 一个新列表。

# file names
l = """00_A1_s1
00_A1_s2
00_A1_s3
04_A1_s1
04_A1_s2
04_A1_s3
08_A1_s1
08_A1_s2
08_A1_s3"""

l = l.split('\n') # file names as list

# sort wrt the last group of characters
print(sorted(l, key=lambda p: p.split('_')[-1]))

输出

04_A1_s1
08_A1_s1
00_A1_s2
04_A1_s2
08_A1_s2
00_A1_s3
04_A1_s3
08_A1_s3

您可以使用 sorted 并使用 tuple 来排序最重要的每个项目,如下所示:

txt = """00_A1_s1
00_A1_s2
00_A1_s3
04_A1_s1
04_A1_s2
04_A1_s3
08_A1_s1
08_A1_s2
08_A1_s3"""

lst = txt.split('\n') 

def orderSort(item):
    splt_itm = item.split('_')
    # first sorting on `A*` then on `s*` and at end consider number
    return (splt_itm[1] , splt_itm[2] , splt_itm[0])
    

result = sorted(lst, key=orderSort)
print('\n'.join(result))

输出:

00_A1_s1
04_A1_s1
08_A1_s1
00_A1_s2
04_A1_s2
08_A1_s2
00_A1_s3
04_A1_s3
08_A1_s3