У меня есть каталог с файлами 90K.Это настолько нелепо огромное количество файлов, что bash-функции, такие как ls
, не работают.Так что, конечно, os.listdir()
из моего скрипта python (Mac Python, версия 2.5);с ошибкой OSError: [Errno 12] Cannot allocate memory: '.'
Люди скажут: «Не кладите столько файлов в один каталог! Вы с ума сошли?»- но мне нравится притворяться, что я живу в будущем, блестящем, светящемся месте, где у меня есть гигабайты памяти, и мне не нужно слишком беспокоиться о том, куда именно отправляются мои файлы, пока естьржавчина осталась на моих вращающихся тарелках.
Итак, есть ли хороший обходной путь для этой os.listdir()
проблемы?Я рассмотрел только обнуление до find
, но это немного грубо, и, к сожалению, find
является рекурсивным, без поддерживаемой опции maxdepth в Mac OS X 10.6.
Вот как выглядит файл os.listdir путем поиска, примерно:
def ls(directory):
import os
files = os.popen4('find %s' % directory)[1].read().rstrip().split('\n')
files.remove(directory)
return files # probably want to remove dir prefix from everything in here too
Обновление: os.listdir()
преуспевает в Python 2.6.