Como posso listar o conteúdo de um diretório em Python?

187

Não pode ser difícil, mas estou tendo um bloqueio mental.

Paul D. Waite
fonte

Respostas:

261
import os
os.listdir("path") # returns list
user85461
fonte
52

Mão única:

import os
os.listdir("/home/username/www/")

Outra maneira :

glob.glob("/home/username/www/*")

Exemplos encontrados aqui .

O glob.globmétodo acima não listará arquivos ocultos.

Desde que eu originalmente respondi a essa pergunta anos atrás, o pathlib foi adicionado ao Python. Minha maneira preferida de listar um diretório agora geralmente envolve o iterdirmétodo em Pathobjetos:

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")
Trey Hunner
fonte
O glob.glob listaria arquivos ocultos (presumo que você queira dizer .XYZarquivos em um contexto de sistema de arquivos Unix), quando usado com glob.glob("/home/username/www/.*")?
Andy Finkenstadt
Sim, quero dizer arquivos começando com um ponto. O exemplo que você deu funcionaria para combinar arquivos ocultos (e apenas arquivos ocultos).
Trey Hunner
Eu apenas importados glob e glob.glob utilizado (R'c: \ users'), mas ele só voltou['c:\\users']
Musixauce3000
1
@ Musixauce3000: Você vai querer fazer glob.glob(r'c:\users\*')(glob, na verdade, não lista os diretórios, mas expande asteriscos e outros que realizam uma tarefa semelhante).
Trey Hunner
38

os.walk pode ser usado se você precisar de recursão:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)
Mark Tolonen
fonte
18

glob.globou os.listdirvai fazer isso.

Tuomas Pelkonen
fonte
import globENTER glob.glob(r'c:\users')ENTER apenas parece retornar ['c:\\users']. Por que é que? Eu gostaria de usar o glob.glob porque, como outros usuários apontaram, ele supostamente retorna o conteúdo de um diretório e também ignora arquivos ocultos. Isso é importante.
precisa saber é o seguinte
porque você precisa especificar um curinga com glob:glob.glob(r'c:\users\*')
Jean-François Fabre
14

O osmódulo lida com todas essas coisas.

os.listdir(path)

Retorne uma lista contendo os nomes das entradas no diretório fornecido pelo caminho. A lista está em ordem arbitrária. Não inclui as entradas especiais '.' e '..' mesmo se eles estiverem presentes no diretório

Disponibilidade: Unix, Windows.

zdav
fonte
4

No Python 3.4+, você pode usar o novo pathlibpacote:

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()retorna um iterador, que pode ser facilmente transformado em list:

contents = list(Path('.').iterdir())
jpyams
fonte
3

Desde o Python 3.5, você pode usar os.scandir.

A diferença é que ele retorna entradas de arquivos e não nomes. Em alguns sistemas operacionais, como o Windows, isso significa que você não precisa os.path.isdir/filesaber se é um arquivo ou não, e isso economiza o tempo da CPU, porque isso statjá foi feito ao verificar o diretório no Windows:

exemplo para listar um diretório e imprimir arquivos maiores que max_valuebytes:

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(leia uma resposta baseada no desempenho extensa meu aqui )

Jean-François Fabre
fonte
2

O código abaixo lista os diretórios e os arquivos no diretório O outro é os.walk

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)
Heenashree Khandelwal
fonte