用 glob 迭代特定目录给我相同的有序输出 - 有可能吗?

问题描述

我想问一些关于 glob 函数的问题。我用它来迭代输入中以特定顺序给出的目录(参见列表“codes=[...]”)。我知道 glob 不提供排序的输出,但是当我根据特定输入对其进行迭代时,它似乎按照我提交的顺序工作。 为了更好地理解,这是我的代码

import glob
import yaml

codes=['a1','b1','c1','a2','b2','c2']

#what I want to get from the files
resolutions = []

# get directories
for code in codes:
    directories = glob.glob("../../DATA/{}".format(code))
   
# browse directories,in the directory "a1" is yaml file with name "a1.yaml" and this is what I want to open
    for directory in directories_sorted:
        pdb_code = directory.split("/")[-1]
        yaml_name = directory + "/" + pdb_code + ".yaml"
    
        with open(yaml_name) as stream:
            yaml_content = yaml.load(stream,Loader=yaml.FullLoader)
            resolution = yaml_content["Resolution"]
            resolutions.append(resolution)

print(resolutions)

我的输出如下所示:

[3.9,3.9,3.6,3.64,3.32]

当我检查 yaml 文件时,确实是 a1 有 3.9,b1 有 3.9,等等,而输入 c2 中的最后一个确实是 3.32。因此,输出似乎与我在“代码”中的输入顺序相同。是否有可能?我只是想确定我的结果没问题。

解决方法

您将有序输入与输出混淆了。是的,您多次以非常特定的顺序运行 glob。您运行的每个 glob 实例都按照您提交它们的顺序返回每次运行的内容,但是每个正在搜索的文件夹中的内容没有排序,至少没有按 Python 排序。 glob 的每个实例都按照文件系统返回文件的顺序返回文件,无论是否按顺序排列。