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

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

В 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, это довольно приятно :).

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

  • Python: как получить количество секунд мили за один раз
  • Не удается выполнить TCP-рукопожатие через NAT между двумя сетевыми картами с SO_BINDTODEVICE
  • Запуск обоих python 2.6 и 3.1 на одном компьютере
  • Подпроцесс Python.Popen с помощью OSError: Невозможно выделить память после периода времени
  • отсутствует модуль python bz2
  • Как запустить скрипт bash внутри Python, но действовать так, как если бы он запускался из другого каталога?
  • запуск python-daemon как непримиримого пользователя и сохранение членства в группах
  • Нажатие данных на веб-браузер при обработке ввода из ffmpeg
  •  
    Interesting Posts for Van-Lav

    При использовании lxml можно ли отображать XML без атрибутов пространства имен?

    Отладка кода Conda и Visual Studio

    Модульные тестовые пакеты

    Найти n-й элемент по имени класса с помощью selenium python

    Есть ли какой-либо рабочий профилировщик памяти для Python3

    подсчет наборов чисел в длинном списке

    Обновление свойств объекта в порядке понимания списка

    Интерпретация эталона в C, Clojure, Python, Ruby, Scala и других

    Невозможно назначить «<SimpleLazyObject: <Пользователь: XXX >>»: «Comment.user» должен быть экземпляром «MyProfile»

    Как правильно переопределить __setattr__ и __getattribute__ в классах нового стиля в Python?

    Можно ли отменить исключение, которое не было обнаружено?

    Как развернуть django-проект и среду выполнения со всеми в один клик

    Обертка класса вокруг файла – правильный способ закрыть дескриптор файла, когда больше не ссылаются

    python os.environ, os.putenv, / usr / bin / env

    Когда использовать пакеты или сетки в tkinter?

    Python - лучший язык программирования в мире.