У меня есть каталог с 90K файлами. Это такое невероятно огромное количество файлов, которые bash функционируют как ls
сбой. Так что, конечно, os.listdir()
из моего python (Mac Python, версия 2.5) script; он терпит неудачу с 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.