微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决根据名称对填充物进行排序

我正在使用 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

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

    # 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)

这是从 glob 中获取文件列表,同时调用变量 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']

可以看出,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 的问题?

解决方法

您可以对 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
,

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。