Listar archivos SOLAMENTE en el directorio actual

En Python, solo quiero enumerar todos los archivos en el directorio actual SOLAMENTE. No quiero que se enumeren los archivos de ningún subdirectorio o padre.

Parece que hay soluciones similares, pero no parecen funcionar para mí. Aquí está mi fragmento de código:

import os for subdir, dirs, files in os.walk('./'): for file in files: do some stuff print file 

Supongamos que tengo 2 archivos, holygrail.py y Tim dentro de mi directorio actual. También tengo una carpeta y contiene dos archivos, llamémoslos Arthur y Lancelot, dentro de ella. Cuando ejecuto el script, esto es lo que obtengo:

 holygrail.py Tim Arthur Lancelot 

Estoy feliz con holygrail.py y Tim. Pero los dos archivos, Arthur y Lancelot, no quiero enlistados.

Solo use os.listdir y os.path.isfile lugar de os.walk .

Ejemplo:

 files = [f for f in os.listdir('.') if os.path.isfile(f)] for f in files: # do something 

Pero tenga cuidado al aplicar esto a otro directorio, como

 files = [f for f in os.listdir(somedir) if os.path.isfile(f)]. 

lo que no funcionaría porque f no es una ruta completa, sino relativa al directorio actual.

Por lo tanto, para filtrar en otro directorio, haga os.path.isfile(os.path.join(somedir, f))

(Gracias Causalidad por la pista)

Puede utilizar os.listdir para este propósito. Si solo desea archivos y no directorios , puede filtrar los resultados usando os.path.isfile .

ejemplo:

 files = os.listdir(os.curdir) #files and directories 

o

 files = filter(os.path.isfile, os.listdir( os.curdir ) ) # files only files = [ f for f in os.listdir( os.curdir ) if os.path.isfile(f) ] #list comprehension version. 
 import os destdir = '/var/tmp/testdir' files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ] 

Puedes usar os.scandir() . La nueva función en stdlib comienza desde Python 3.5.

 import os for entry in os.scandir('.'): if entry.is_file(): print(entry.name) 

Más rápido que os.listdir() . os.walk() implementa os.scandir() .

Esto se puede hacer con os.walk ()

Python 3.5.2 probado;

 import os for root, dirs, files in os.walk('.', topdown=True): dirs.clear() #with topdown true, this will prevent walk from going into subs for file in files: #do some stuff print(file) 

elimine la línea dirs.clear () y los archivos en subcarpetas se incluirán nuevamente.

actualización con referencias ;

os.walk documentado aquí y habla sobre la creación de la lista triple y los efectos de arriba a abajo.

.clear () documentado aquí para vaciar una lista

por lo tanto, al borrar la lista relevante de os.walk, puede aplicar su resultado a sus necesidades.

en lugar de os.walk , solo usa os.listdir

 import os for subdir, dirs, files in os.walk('./'): for file in files: do some stuff print file 

Puede mejorar este código con del dirs[:] que será como el siguiente.

 import os for subdir, dirs, files in os.walk('./'): del dirs[:] for file in files: do some stuff print file 

O incluso mejor si pudiera apuntar os.walk con el directorio de trabajo actual.

 import os cwd = os.getcwd() for subdir, dirs, files in os.walk(cwd, topdown=True): del dirs[:] # remove the sub directories. for file in files: do some stuff print file 

Mi solución es:

 import re p = re.compile('[az]+', re.IGNORECASE) words = p.findall("Hello, world! I'm a coder") 

Creo que esta solución es mejor.