Como obtenho uma lista de todos os arquivos (e diretórios) em um determinado diretório no Python?
572
Como obtenho uma lista de todos os arquivos (e diretórios) em um determinado diretório no Python?
Esta é uma maneira de percorrer todos os arquivos e diretórios em uma árvore de diretórios:
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')
for subdirname in dirnames: if subdirname != '.git'
Você pode usar
Para referência e mais funções, veja aqui:
fonte
os.scandir
entanto, os documentos do python 3 dizem para você usar , pois, em muitos casos, permite impedir chamadas do sistema, acelerando gratuitamente (o IPC e o IO são lentos).os.path.isdir
.Aqui está uma função auxiliar que eu uso com frequência:
fonte
fonte
r'C:\temp'
é mais claro e preferível a"C:\\temp"
Rawstrings é preferível a evitar barras invertidas.Se você precisar de habilidades de globbing, há um módulo para isso também. Por exemplo:
retornará algo como:
Veja a documentação aqui .
fonte
Tente o seguinte:
fonte
Para arquivos no diretório de trabalho atual sem especificar um caminho
Python 2.7:
Python 3.x:
Obrigado a Stam Kaly por comentar sobre o python 3.x
fonte
os.listdir()
lista elementos no diretório atual por padrão! Portanto, não há necessidade deos.getcwd()
:)Uma implementação recursiva
fonte
Eu escrevi uma versão longa, com todas as opções que preciso: http://sam.nipl.net/code/python/find.py
Eu acho que vai caber aqui também:
fonte
Aqui está outra opção.
Ele retorna um iterador dos objetos os.DirEntry correspondentes às entradas (junto com as informações do atributo do arquivo) no diretório fornecido pelo caminho.
Exemplo:
O uso de scandir () em vez de listdir () pode aumentar significativamente o desempenho do código que também precisa de informações sobre o tipo ou o atributo do arquivo , porque os objetos os.DirEntry expõem essas informações se o sistema operacional fornecer essas informações ao varrer um diretório. Todos os métodos os.DirEntry podem executar uma chamada do sistema, mas is_dir () e is_file () geralmente requerem apenas uma chamada do sistema para links simbólicos; os.DirEntry.stat () sempre requer uma chamada do sistema no Unix, mas apenas uma para links simbólicos no Windows.
Documentos do Python
fonte
Embora
os.listdir()
seja bom para gerar uma lista de nomes de arquivos e diretórios, frequentemente você deseja fazer mais quando tiver esses nomes - e no Python3, o pathlib simplifica essas tarefas. Vamos dar uma olhada e ver se você gosta tanto quanto eu.Para listar o conteúdo do diretório, construa um objeto Path e pegue o iterador:
Se queremos apenas uma lista de nomes de coisas:
Se você quiser apenas os diretórios:
Se você deseja os nomes de todos os arquivos conf nessa árvore:
Se você deseja uma lista de arquivos conf na árvore> = 1K:
Resolver caminhos relativos fica fácil:
Navegar com um caminho é bastante claro (embora inesperado):
fonte
Um bom liner para listar apenas os arquivos recursivamente. Eu usei isso na minha diretiva setup.py package_data:
Sei que não é a resposta para a pergunta, mas pode ser útil
fonte
Para Python 2
Para Python 3
Para filtro e mapa, você precisa envolvê-los com list ()
A recomendação agora é substituir o uso de mapa e filtro por expressões de geradores ou compreensão de lista:
fonte
Aqui está uma versão Pythonic de uma linha:
Este código lista o caminho completo de todos os arquivos e diretórios no nome do diretório fornecido.
fonte
Eu sei que esta é uma pergunta antiga. Esta é uma maneira elegante de me deparar se você estiver em uma máquina liunx.
fonte
fonte
FYI Adicione um filtro de extensão ou importação de arquivo ext
fonte
Se fosse o caso, eu jogaria isso para dentro. Maneira simples e suja de fazer pesquisas de caracteres curinga.
fonte
O código abaixo lista os diretórios e os arquivos no diretório
fonte
O que trabalhou comigo é uma espécie de versão modificada da resposta de Saleh acima.
O código é o seguinte:
"dir = nomes de arquivos 'nome_do_diretório' '= [os.path.abspath (os.path.join (dir, i)) para i no os.listdir (dir)]"
fonte