Сортировка списка файлов после времени создания, перестала работать с сетевым расположением

#python #sorting

#python #сортировка

Вопрос:

Я создал список файлов с помощью glob. Этот список я сортирую после времени создания.

Код работал — но внезапно остановился.

Он все еще работает, когда файлы находятся в локальной папке. Он также работает в сетевом расположении, когда есть только несколько файлов.

Обычно в сетевом расположении находится 5000 файлов.

 def get_files(folder):
    files_list = glob.glob(folder)
    files_list.sort(key=os.path.getctime)
    return files_list
  

Он генерирует files_list без проблем, но он останавливается, когда дело доходит до сортировки.

Комментарии:

1. Вы уверены, что это не просто задержка при загрузке каждого файла? Извлечение метаданных из сетевых файловых систем обычно происходит намного медленнее, чем из локальных файловых систем.

2. Вы правы — на самом деле он возвращает данные через долгое время.

Ответ №1:

Я думаю, это то, что вы хотите.

 def get_files(folder):
    files_list = glob.glob(folder)
    return sorted(files_list, key = os.path.getctime)
  

Комментарии:

1. Спасибо за предложение. Мой код не будет передаваться в отсортированном списке — спасибо, что дали мне знать. Это более короткий и лучший код, чем мой, но, к сожалению, для его обработки требуется столько же времени.

Ответ №2:

getctime для удаленного файла выполняется сетевая операция. Это означает, что под капотом у вас есть (большой) доступ к сети для получения списка файлов, а затем один сетевой доступ для каждого файла, чтобы получить его временную метку.

Согласно документации для scandir него можно сэкономить ресурсы, получив атрибуты файла при первом доступе к папке. Итак, вы должны попробовать:

 def get_files(folder):
    entries = os.scandir(folder)
    files_list = [entry.name for entry in sorted(entries, key=lambda x:x.stat().c_time)]
  

Комментарии:

1. Привет — Спасибо за ваше предложение. Однако это выдает такую ошибку: TypeError: сортированный ожидаемый 1 аргумент, получено 2

2. Большое вам спасибо, я попробую.