os.listdir не обращается к файлам с цифровыми обозначениями в порядке возрастания [дубликат]

Мы хотим, чтобы файлы png были доступны как 15.png,45.png,75.png и так далее. Это код и результат, который мы получаем

      import os
keypts_labels=[]
class_list=os.listdir('dataset')
for name in class_list:
    for image in os.listdir(f"dataset/{name}"):
        for item in os.listdir(f"dataset/{name}/{image}"):
            print(os.path.abspath(f"dataset/{name}/{image}/{item}"))

1 ответ

Вам не нужно обрабатывать всю эту повторяющуюся логику, когда есть простые способы сделать это. См. подход ниже

      def list_files(from_folder):
    from glob import glob
    import pathlib
    # Use glob to get all files in the folder, based on the type
    png_files = glob(f"{from_folder}/**/*.png", recursive=True)
    # Use a numerical sort, using the file name prefix as the key
    png_files = sorted(png_files, key=lambda path: int(pathlib.Path(path).stem))
    
    print(png_files) #return it if you want

list_files("dataset")

Эта часть функции фактически перечислит то, что вам нужно. Это предполагает, что все png-файлы имеют имя допустимого числа, и вы ищете только png-файлы.

Надеюсь, логика понятна из самих комментариев.

Другие вопросы по тегам