неполный список каталогов

Можно ли получить листинг частичного каталога?

В Python у меня есть процесс, который пытается получить os.listdir каталога, содержащего> 100 000 файлов, и он берет навсегда. Я хотел бы иметь возможность, скажем, быстро получить список первых 1000 файлов.

Как я могу это достичь?

One Solution collect form web for “неполный список каталогов”

Я нашел решение, которое дает мне случайный порядок файлов 🙂 (По крайней мере, я не вижу шаблон)

Сначала я нашел этот пост в майнисте python . Прикреплено 3 файла, которые вы должны скопировать на свой диск ( opendir.pyx, setup.py, test.py ). Далее вам понадобится пакет python Pyrex для компиляции файла opendir.pyx из сообщения. У меня возникли проблемы с установкой Pyrex и выяснилось, что мне пришлось установить python-dev помощью apt-get . Затем я установил пакет opendir из трех загруженных выше файлов с python setup.py install . Файл test.py содержит примеры использования.

Затем мне было интересно, насколько быстрее это решение будет, чем с помощью os.listdir, и я создал 200000 файлов со следующим небольшим shellscript.

 for((i=0; i<200000; i++)) do touch $i done 

Следующий сценарий – это мой тест, который работает в каталоге, где я только что создал файлы:

 from opendir import opendir from timeit import Timer import os def list_first_fast(i): d=opendir(".") filenames=[] for _ in range(i): name = d.read() if not name: break filenames.append(name) return filenames def list_first_slow(i): return os.listdir(".")[:i] if __name__ == '__main__': t1 = Timer("list_first_fast(100)", "from __main__ import list_first_fast") t2 = Timer("list_first_slow(100)", "from __main__ import list_first_slow") print "With opendir: ", t1.repeat(5, 100) print "With os.list: ", t2.repeat(5, 100) 

Выходной сигнал в моей системе:

 With opendir: [0.045053958892822266, 0.04376697540283203, 0.0437769889831543, 0.04387712478637695, 0.04404592514038086] With os.list: [9.50291895866394, 9.567682027816772, 9.865844964981079, 13.486984968185425, 9.51977801322937] 

Как вы можете видеть, я получил ускорение в 200 раз при возвращении списка из 100 имен файлов из 200000, это довольно приятно :).

Надеюсь, это цель, которую вы пытаетесь достичь.

  • Разница между Windows и Windows
  • На каких системах / файловых системах есть os.open () atomic?
  • Почему операция печати в обработчике сигнала может изменить ситуацию взаимоблокировки?
  • Как использовать переменную bash в python
  • pySerial отлично работает в интерпретаторе Python, но не является автономным
  • Как скрыть .pyc-файлы, когда вы вводите `ls` в bash
  • Какой пользователь Ansible выполнит мои команды как?
  • apt-get install для разных версий python
  • Многопроцессорность Python Pool.apply_async с общими переменными (значение)
  • Как стать продуктивным с помощью Vim / Emacs
  • Многопроцессорность Python: отказ от прав
  • Python - лучший язык программирования в мире.