根据名字对填充物进行排序

2024-09-29 21:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个Python脚本(在macOS Mojave上使用Python2.7),它列出目录中存在的文件,然后对它们执行一些操作。以下是12个DLG文件在workdir中的排列方式:

(base) Glebs-MacBook-Pro:1200_cne_lig177 gleb$ ls -t
1200_01_lig_cne_177.dlg 1200_05_lig_cne_177.dlg 1200_09_lig_cne_177.dlg
1200_02_lig_cne_177.dlg 1200_06_lig_cne_177.dlg 1200_10_lig_cne_177.dlg
1200_03_lig_cne_177.dlg 1200_07_lig_cne_177.dlg 1200_11_lig_cne_177.dlg
1200_04_lig_cne_177.dlg 1200_08_lig_cne_177.dlg 1200_12_lig_cne_177.dlg

这是python脚本的一部分,用于从这些DLG文件生成列表:

    # make a list of dlg filles
dlg_list = glob.glob(directory + '/*.dlg'
print(dlg_list)

d = Docking()
# doing something on DLG
for dlg in dlg_list:
        d.readDlg(dlg)

这是调用变量dlg_list时从glob获得的文件列表:

['/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_04_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_12_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_03_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_02_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_05_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_07_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_11_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_08_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_06_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_10_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_09_lig_cne_177.dlg',
 '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_01_lig_cne_177.dlg']

可以看出,DLG文件的计数(每个文件名称中7000_uu之后的数字)是:1200_04、1200_12、1200_03、1200_02等,这与自然顺序1200_01、1200_02、1200_03、1200_04等不匹配

在此之前,我使用了旧版本的macOS(El Capitan),并使用完全相同的Python版本运行相同的脚本,以正确的方式从01到12排列DLG文件

如果OSX和glob排序的工作方式不同,我无法解释为什么会发生这种情况。如何解决glob的问题


Tags: 文件toscriptsusersfoldersclustersdesktopdlg
2条回答

您可以对dlg_list进行排序

例如:

dlg_list = [
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_04_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_12_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_03_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_02_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_05_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_07_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_11_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_08_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_06_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_10_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_09_lig_cne_177.dlg',
    '/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_01_lig_cne_177.dlg',
]

sorted_dlg_list = sorted(dlg_list, key=lambda x: x.rsplit("/")[-1].split("_")[1])

for item in sorted_dlg_list:
    #  do your stuff here
    print(item)

输出:

/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_01_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_02_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_03_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_04_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_05_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_06_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_07_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_08_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_09_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_10_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_11_lig_cne_177.dlg
/Users/gleb/Desktop/scripts/analys_clusters/sub_folders_to_analyse/7000_cne_lig177.AllBoxes/7000_12_lig_cne_177.dlg

您可以在sorted()方法的自定义键中使用str.split()方法:

sorted(dlg_list, key=lambda x: x.split("_")[-4])

相关问题 更多 >

    热门问题