按名称排序填充



我正在使用Python脚本(在macOS Mojave上使用Python 2.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_后的数字)为: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的问题?

您可以对您的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])

最新更新