name - read all files in directory python
Directorio-árbol listado en Python (20)
¿Cómo obtengo una lista de todos los archivos (y directorios) en un directorio determinado en Python?
Para Python 2
#!/bin/python2
import os
def scan_dir(path):
print map(os.path.abspath, os.listdir(pwd))
Para Python 3
Para el filtro y el mapa, necesita envolverlos con list ()
#!/bin/python3
import os
def scan_dir(path):
print(list(map(os.path.abspath, os.listdir(pwd))))
La recomendación ahora es que reemplace su uso del mapa y el filtro con expresiones de generadores o listas de comprensión:
#!/bin/python
import os
def scan_dir(path):
print([os.path.abspath(f) for f in os.listdir(path)])
A continuación el código listará los directorios y los archivos dentro del directorio
def print_directory_contents(sPath):
import os
for sChild in os.listdir(sPath):
sChildPath = os.path.join(sPath,sChild)
if os.path.isdir(sChildPath):
print_directory_contents(sChildPath)
else:
print(sChildPath)
Aquí hay otra opción.
os.scandir(path=''.'')
Devuelve un iterador de objetos os.DirEntry correspondientes a las entradas (junto con la información del atributo de archivo) en el directorio dado por la ruta.
Ejemplo:
with os.scandir(path) as it:
for entry in it:
if not entry.name.startswith(''.''):
print(entry.name)
El uso de scandir () en lugar de listdir () puede aumentar significativamente el rendimiento del código que también necesita información sobre el tipo de archivo o los atributos del archivo , ya que los objetos os.DirEntry exponen esta información si el sistema operativo la proporciona al escanear un directorio. Todos los métodos os.DirEntry pueden realizar una llamada al sistema, pero is_dir () y is_file () generalmente solo requieren una llamada al sistema para enlaces simbólicos; os.DirEntry.stat () siempre requiere una llamada al sistema en Unix, pero solo requiere una para los enlaces simbólicos en Windows.
Aquí hay una función de ayuda que uso con bastante frecuencia:
import os
def listdir_fullpath(d):
return [os.path.join(d, f) for f in os.listdir(d)]
Aquí hay una versión en línea de Pythonic:
import os
dir = ''given_directory_name''
filenames = [os.path.join(os.path.dirname(os.path.abspath(__file__)),dir,i) for i in os.listdir(dir)]
Este código enumera la ruta completa de todos los archivos y directorios en el nombre de directorio dado.
El que funcionó conmigo es una especie de versión modificada de la respuesta de Saleh anterior.
El código es el siguiente:
"dir = ''given_directory_name'' nombres de archivo = [os.path.abspath (os.path.join (dir, i)) para i en os.listdir (dir)]"
Escribí una versión larga, con todas las opciones que podría necesitar: http://sam.nipl.net/code/python/find.py
Supongo que aquí también cabrá:
#!/usr/bin/env python
import os
import sys
def ls(dir, hidden=False, relative=True):
nodes = []
for nm in os.listdir(dir):
if not hidden and nm.startswith(''.''):
continue
if not relative:
nm = os.path.join(dir, nm)
nodes.append(nm)
nodes.sort()
return nodes
def find(root, files=True, dirs=False, hidden=False, relative=True, topdown=True):
root = os.path.join(root, '''') # add slash if not there
for parent, ldirs, lfiles in os.walk(root, topdown=topdown):
if relative:
parent = parent[len(root):]
if dirs and parent:
yield os.path.join(parent, '''')
if not hidden:
lfiles = [nm for nm in lfiles if not nm.startswith(''.'')]
ldirs[:] = [nm for nm in ldirs if not nm.startswith(''.'')] # in place
if files:
lfiles.sort()
for nm in lfiles:
nm = os.path.join(parent, nm)
yield nm
def test(root):
print "* directory listing, with hidden files:"
print ls(root, hidden=True)
print
print "* recursive listing, with dirs, but no hidden files:"
for f in find(root, dirs=True):
print f
print
if __name__ == "__main__":
test(*sys.argv[1:])
Esta es una forma de recorrer cada archivo y directorio en un árbol de directorios:
import os
for dirname, dirnames, filenames in os.walk(''.''):
# print path to all subdirectories first.
for subdirname in dirnames:
print(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
print(os.path.join(dirname, filename))
# Advanced usage:
# editing the ''dirnames'' list will stop os.walk() from recursing into there.
if ''.git'' in dirnames:
# don''t go into any .git directories.
dirnames.remove(''.git'')
FYI agrega un filtro de extensión o archivo ext import os
path = ''.''
for dirname, dirnames, filenames in os.walk(path):
# print path to all filenames with extension py.
for filename in filenames:
fname_path = os.path.join(dirname, filename)
fext = os.path.splitext(fname_path)[1]
if fext == ''.py'':
print fname_path
else:
continue
Para archivos en el directorio de trabajo actual sin especificar una ruta
Python 2.7:
import os
os.listdir(os.getcwd())
Python 3.x:
import os
os.listdir()
Gracias a Stam Kaly por comentar sobre python 3.x
Prueba esto:
import os
for top, dirs, files in os.walk(''./''):
for nm in files:
print os.path.join(top, nm)
Puedes usar
os.listdir(path)
Para referencia y más funciones os mira aquí:
- Documentos de Python 2: https://docs.python.org/2/library/os.html#os.listdir
- Documentos de Python 3: https://docs.python.org/3/library/os.html#os.listdir
Sé que esta es una vieja pregunta. Esta es una buena manera que encontré si estás en una máquina liunx.
import subprocess
print(subprocess.check_output(["ls", "/"]).decode("utf8"))
Si me lo hubiera imaginado, lo haría. Una forma sencilla y sucia de hacer búsquedas con comodines.
import re
import os
[a for a in os.listdir(".") if re.search("^.*/.py$",a)]
Si necesitas habilidades globales, hay un módulo para eso también. Por ejemplo:
import glob
glob.glob(''./[0-9].*'')
devolverá algo como:
[''./1.gif'', ''./2.txt'']
Vea la documentación here .
Un buen trazador de líneas para enumerar solamente los archivos recursivamente. Utilicé esto en mi directiva setup.py package_data:
import os
[os.path.join(x[0],y) for x in os.walk(''<some_directory>'') for y in x[2]]
Sé que no es la respuesta a la pregunta, pero puede ser útil
Una implementación recursiva.
import os
def scan_dir(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
print path
else:
scan_dir(path)
#import modules
import os
_CURRENT_DIR = ''.''
def rec_tree_traverse(curr_dir, indent):
"recurcive function to traverse the directory"
#print "[traverse_tree]"
try :
dfList = [os.path.join(curr_dir, f_or_d) for f_or_d in os.listdir(curr_dir)]
except:
print "wrong path name/directory name"
return
for file_or_dir in dfList:
if os.path.isdir(file_or_dir):
#print "dir : ",
print indent, file_or_dir,"//"
rec_tree_traverse(file_or_dir, indent*2)
if os.path.isfile(file_or_dir):
#print "file : ",
print indent, file_or_dir
#end if for loop
#end of traverse_tree()
def main():
base_dir = _CURRENT_DIR
rec_tree_traverse(base_dir," ")
raw_input("enter any key to exit....")
#end of main()
if __name__ == ''__main__'':
main()
import os
for filename in os.listdir("C://temp"):
print filename
import os, sys
#open files in directory
path = "My Documents"
dirs = os.listdir( path )
# print the files in given directory
for file in dirs:
print (file)