una ruta nombre manejo leer escribir ejecutar directorios directorio desde consola carpetas archivos archivo actual python

ruta - manejo de archivos y carpetas en python



Listar archivos en SOLAMENTE el directorio actual (8)

Mi solución es:

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

Creo que esta solución es mejor

En Python, solo quiero enumerar todos los archivos en el directorio actual SOLAMENTE. No quiero que los archivos aparezcan en 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 que aparezcan en la lista.


Puede 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() implements os.scandir() .


Puede usar os.listdir para este propósito. Si solo desea archivos y no directorios , puede filtrar los resultados utilizando 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.


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

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 Causality por la pista)


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


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 incluyen de nuevo.

actualización con referencias ;

os.walk documentado aquí y habla sobre la lista triple que se está creando y los efectos descendentes.

.clear() documentado aquí para vaciar una lista

así que al borrar la lista relevante de os.walk, puede aplicar el resultado a sus necesidades.


import os destdir = ''/var/tmp/testdir'' files = [ f for f in os.listdir(destdir) if os.path.isfile(os.path.join(destdir,f)) ]


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á similar a seguir.

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 a 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