Eu preciso contar o número de arquivos em um diretório usando Python.
Eu acho que a maneira mais fácil é len(glob.glob('*'))
, mas isso também conta o próprio diretório como um arquivo.
Existe alguma maneira de contar apenas os arquivos em um diretório?
Respostas:
os.listdir()
será um pouco mais eficiente do que usarglob.glob
. Para testar se um nome de arquivo é um arquivo comum (e não um diretório ou outra entidade), useos.path.isfile()
:fonte
folder_path
interior,os.path.filename(name)
se você não estiver no cwd. stackoverflow.com/questions/17893542/…os.path.join(DIR, name)
maisDIR + '/' + name
? O último é mais curto e, na IMO, mais claro que o primeiro. Existe, talvez, alguns SOs nos quais o último falharia?fonte
Para todos os tipos de arquivos, os subdiretórios incluem:
Somente arquivos (evitando subdiretórios):
fonte
É aqui que o fnmatch é muito útil:
Mais detalhes: http://docs.python.org/2/library/fnmatch.html
fonte
os.path.isfile()
a resposta aceita. Também significativamente mais rápido queglob.glob()
.Se você deseja contar todos os arquivos no diretório - incluindo arquivos em subdiretórios, a maneira mais pitônica é:
Usamos soma que é mais rápida do que adicionar explicitamente a contagem de arquivos (tempos pendentes)
fonte
_
em umfor
loop.os.walk
também eu sei. Mas não tenho certeza do que está acontecendo com sublinhados dentro dasum
função, você poderia elaborar. Obrigado!fonte
fonte
Estou surpreso que ninguém tenha mencionado
os.scandir
:fonte
Isso usa
os.listdir
e funciona para qualquer diretório:isso pode ser simplificado com um gerador e acelerado um pouco com:
fonte
Retirado desta postagem
fonte
files
é uma lista. 2. OP não está procurando contagem recursivafonte
O código de Lucas reformata.
fonte
Aqui está um comando simples de uma linha que eu achei útil:
fonte
ls
geralmente é desaprovada (geralmente pode causar problemas), embora esse não seja um método "rápido e sujo" ruim no shell. Você deve usarls -1
, no entanto, para garantir uma linha por arquivo.Embora eu concorde com a resposta fornecida por @DanielStutzbach:
os.listdir()
será um pouco mais eficiente do que usarglob.glob
.No entanto, uma precisão extra, se você deseja contar o número de arquivos específicos na pasta, deseja usar
len(glob.glob())
. Por exemplo, se você contar todos os PDFs em uma pasta que deseja usar:fonte
É simples:
simplesmente conta o número de arquivos no diretório, usei a técnica de compreensão de lista para percorrer um diretório específico, retornando todos os arquivos em troca. "len (lista retornada)" retorna o número de arquivos.
fonte
fonte
Se você usar o shell padrão do sistema operacional, poderá obter o resultado muito mais rápido do que usar o modo python puro.
Exemplo para Windows:
fonte
Encontrei outra resposta que pode estar correta como resposta aceita.
fonte
Eu usei
glob.iglob
para uma estrutura de diretório semelhante aAs duas opções a seguir retornam 4 (conforme o esperado, ou seja, não contam as próprias subpastas )
len(list(glob.iglob("data/train/*/*.png", recursive=True)))
sum(1 for i in glob.iglob("data/train/*/*.png"))
fonte
Eu fiz isso e isso retornou o número de arquivos na pasta (Attack_Data) ... isso funciona bem.
fonte