rutas ruta operaciones obtener gestion directorios directorio copiar con como buscar archivos archivo actual python filenames pygame py2exe distutils

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).