Tengo un directorio con 90K archivos en él. Esta es una cantidad de archivos absurdamente enorme que fallan las funciones como ls
. Así que por supuesto, hace os.listdir()
de mi secuencia de comandos python (Mac Python, versión 2.5); falla con OSError: [Errno 12] Cannot allocate memory: '.'
Solución del problema OSError con os.listdir
La gente dirá "¡No coloque tantos archivos en un solo directorio! ¿Está loco?" - pero me gusta fingir que vivo en el futuro, un lugar brillante y brillante, donde tengo gigabytes de memoria a mi disposición, y no tengo que preocuparme demasiado por dónde exactamente van mis archivos, siempre y cuando haya óxido en mis platos giratorios.
Entonces, ¿hay una buena solución para este problema os.listdir()
? He considerado simplemente bombardear a find
, pero eso es un poco asqueroso, y desafortunadamente find
es recursivo, sin la opción de maxdepth admitida en Mac OS X 10.6.
Aquí es lo que el os.listdir a través de los bombardeos a cabo para encontrar parece, más o menos:
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
Actualización:os.listdir()
tiene éxito en Python 2.6.
¿Cuál es el error que obtiene? De forma rutinaria utilizo 'os.listdir' para obtener listados de directorios con 50-100k archivos en ellos. 'os.listdir' es también la opción más rápida, ya que no' stat' de cada archivo en el directorio. – Seth
@Seth, obtengo OSError: [Errno 12] No se puede asignar memoria: '.' –
¿Aproximadamente cuántos archivos hay en este directorio? –