2008-09-26 4 views

Respuesta

25

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

hay tres posibilidades:

1) Al igual que File.listFiles():

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

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

El glob módulo contiene funciones para listar los archivos en el sistema de archivos utilizando shell Unix como patrón, por ejemplo,

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

3) Transversal del archivo con el pie:

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

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 
Usted puede incluso sobre la marcha eliminar directorios de "directorios" para evitar caminar a ese directorio: si "Joe" en directorios: dirs.remove ("Joe") para evitar entrar en directorios llamados "joe".

listdir y caminar están documentados here. glob está documentado here.

2

Directamente desde la biblioteca de Python Refererence

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

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

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

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

Un ejemplo desde el enlace anterior ...

# 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)) 
2

Utilice 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. 
2

lo recomiendo contra os.path.walk a medida que se retira en Python 3.0. os.walk es más simple, de todos modos, o al menos I lo encuentro más simple.

5

Como Pythonista desde hace mucho tiempo, tengo que decir que las funciones de manipulación de archivos/rutas en la biblioteca std son sub-par: no están orientadas a objetos y reflejan un sistema obsoleto, lets-wrap-OS- filosofía de las funciones sin pensamiento Recomiendo encarecidamente el módulo 'ruta' como un contenedor (alrededor de os, ruta de acceso, glob y archivo de temp si es necesario): mucho mejor 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() 
1

también puede comprobar fuera de Unipath, una envoltura orientado a objetos de módulos os, os.path 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 tienda de queso:

$ pip install unipath 
0

En vista de que he programado en Python desde hace mucho tiempo, muchas veces he utilizado el módulo os e hice mi propia función para imprimir todos los archivos en un directorio.

El código de 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) 
Cuestiones relacionadas