txt open modificar leer importar gestion formas espaƱol ejercicios como binarios archivos archivo java python file-traversal

java - open - modificar txt python



En busca de funciones de desplazamiento de archivos en Python que son como Java (9)

Directamente desde la biblioteca de referencia de Python

>>> import glob >>> glob.glob(''./[0-9].*'') [''./1.gif'', ''./2.txt''] >>> glob.glob(''*.gif'') [''1.gif'', ''card.gif''] >>> glob.glob(''?.gif'') [''1.gif'']

En Java, puede hacer File.listFiles() y recibir todos los archivos en un directorio. A continuación, puede recurse fácilmente a través de árboles de directorios.

¿Hay alguna manera análoga de hacer esto en Python?


Recomiendo contra os.path.walk ya que se elimina en Python 3.0. os.walk es más simple, de todos modos, o al menos lo encuentro más simple.


Sí hay. La forma de Python es aún mejor.

Hay tres posibilidades:

1) Como File.listFiles ():

Python tiene la función os.listdir (ruta). Funciona como el método de Java.

2) expansión de patrón de nombre de ruta con glob:

El módulo glob contiene funciones para listar archivos en el sistema de archivos utilizando un patrón tipo shell de Unix, por ej.

files = glob.glob(''/usr/joe/*.gif'')

3) File Traversal con caminata:

Realmente agradable es la función os.walk de Python.

El método walk devuelve una función de generación que enumera recursivamente todos los directorios y archivos debajo de una ruta de inicio determinada.

Un ejemplo:

import os from os.path import join for root, dirs, files in os.walk(''/usr''): print "Current directory", root print "Sub directories", dirs print "Files", files Incluso puede sobre la marcha eliminar directorios de "dirs" para evitar ir a ese directorio: if "joe" en dirs: dirs.remove ("joe") para evitar entrar en directorios llamados "joe".

listdir y caminar están documentados aquí . glob está documentado aquí .


Como Pythonista desde hace mucho tiempo, tengo que decir que las funciones de manipulación de ruta / archivo en la biblioteca estándar son sub-par: no están orientadas a objetos y reflejan un obsoleto, lets-wrap-OS-system-functions-without- filosofía de pensamiento. Recomiendo encarecidamente el módulo ''ruta'' como un contenedor (en torno a os, os.path, glob y tempfile si se debe saber): mucho más agradable y OOPy: http://pypi.python.org/pypi/path.py /2.2

Esto es walk () con el módulo de ruta:

dir = path(os.environ[''HOME'']) for f in dir.walk(): if f.isfile() and f.endswith(''~''): f.remove()


También puede consultar Unipath , un contenedor orientado a objetos de los módulos os , shutil y shutil de Python.

Ejemplo:

>>> from unipath import Path >>> p = Path(''/Users/kermit'') >>> p.listdir() Path(u''/Users/kermit/Applications''), Path(u''/Users/kermit/Desktop''), Path(u''/Users/kermit/Documents''), Path(u''/Users/kermit/Downloads''), ...

Instalación a través de la tienda de queso:

$ pip install unipath


Al ver que he programado en python durante mucho tiempo, he usado muchas veces el módulo os y he creado mi propia función para imprimir todos los archivos en un directorio.

El código para la función:

import os def PrintFiles(direc): files = os.listdir(direc) for x in range(len(files)): print("File no. "+str(x+1)+": "+files[x]) PrintFiles(direc)


Eche un vistazo a os.walk() y los ejemplos aquí . Con os.walk() puede procesar fácilmente un árbol de directorios completo.

Un ejemplo del enlace de arriba ...

# Delete everything reachable from the directory named in ''top'', # assuming there are no symbolic links. # CAUTION: This is dangerous! For example, if top == ''/'', it # could delete all your disk files. import os for root, dirs, files in os.walk(top, topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name))


Pruebe "listdir ()" en el módulo os ( docs ):

import os print os.listdir(''.'')


Use os.path.walk si también desea subdirectorios.

walk(top, func, arg) Directory tree walk with callback function. For each directory in the directory tree rooted at top (including top itself, but excluding ''.'' and ''..''), call func(arg, dirname, fnames). dirname is the name of the directory, and fnames a list of the names of the files and subdirectories in dirname (excluding ''.'' and ''..''). func may modify the fnames list in-place (e.g. via del or slice assignment), and walk will only recurse into the subdirectories whose names remain in fnames; this can be used to implement a filter, or to impose a specific order of visiting. No semantics are defined for, or required of, arg, beyond that arg is always passed to func. It can be used, e.g., to pass a filename pattern, or a mutable object designed to accumulate statistics. Passing None for arg is common.