ruta - python directorios
leer los nombres de archivo del directorio w/python (4)
Estoy tratando de hacer un ejecutable pygame. Utilizaré el siguiente archivo de instalación:
from distutils.core import setup
import py2exe
setup(
console = [ "game.py" ],
author = "me",
data_files = [ ( directory, [ file_1, file_2... ] ) ]
)
He conseguido que esto funcione bien en un juego simple, pero el juego que quiero empaquetar tiene> 700 archivos de imagen. Mi pregunta es, ¿hay una manera simple de leer todos los nombres de archivos de un directorio para que no tenga que enumerarlos por separado?
Si bien hay algunos archivos numerados en secuencia, la mayoría tiene un nombre de raíz diferente, por lo que escribir un bucle que haga las cadenas adecuadas no es una opción.
Gracias
El módulo os
tiene un método llamado listdir
que toma una ruta y devuelve el contenido como una lista.
Prueba esto
data_files = [directory, ...] # whatever you want to put specifically.
data_files += [file for file in os.listdir(''images'') if os.path.isfile(file)] # for adding your image files
Use glob para recolectar todos los archivos en un directorio. Uso . para recopilar todos los archivos, o * .jpg para recopilar todos los archivos .jpg. Esto colocará las imágenes en una carpeta llamada "Imágenes" en su directorio de salida py2exe.
...
from glob import glob
...
data_files = [
("Stuff", glob(r''C:/projectfolder/Stuff/*.*''))
,("dlls", glob(r''C:/projectfolder/dlls/*.dll''))
,("Images", glob(r''C:/projectfolder/images/*.*''))
]
...
setup(
name=''ProjectName''
,options = options
,data_files=data_files
,console=[''projectname.py'']
)
import os
data_files = [(x[0], x[2]) for x in os.walk(root_dir)]
http://docs.python.org/library/os.html#os.walk
Esto le dará los archivos para cada subdirectorio contenido dentro de root_dir
(junto con los de root_dir
, por supuesto) como tuplas en el formato [(dirpath1, [file1, file2, ...]), (dirpath2, [file3, file4, ...]), ...]
Te di esto como mi respuesta porque asumo (o más bien, espero) que, con tantos archivos, los mantienes organizados adecuadamente en lugar de tenerlos todos en un solo directorio sin subdirectorios.
Ha pasado un tiempo, pero volviendo a esto ahora me doy cuenta de que para una larga lista de archivos, la expresión de un generador probablemente sería más eficiente. Para hacerlo, se necesita un cambio muy simple; reemplazar los corchetes exteriores con paréntesis, es decir,
import os
data_file_gen = ((x[0], x[2]) for x in os.walk(root_dir))
Y data_file_gen
podría utilizarse en cualquier data_files
donde se data_files
(suponiendo que solo está utilizando el generador una vez; si el generador se va a utilizar varias veces, deberá recrear el generador para cada uso. En tales casos, puede ser mejor). simplemente use el método de lista a menos que la memoria se convierta en un problema).