#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. Большое вам спасибо, я попробую.