Resumo : neste tutorial, você aprenderá como listar arquivos em um diretório usando a os.walk()
função Python.
Às vezes, você pode querer listar todos os arquivos de um diretório para processamento. Por exemplo, você pode querer localizar todas as imagens de um diretório e redimensionar cada uma delas. Para listar todos os arquivos em um diretório, você pode usar a os.walk()
função.
A função gera nomes de arquivos em um diretório percorrendo a árvore de cima para baixo ou de baixo para cima. O sistema operacional. A função produz uma tupla com três campos (dirpath, dirnames e filenames) para cada diretório na árvore de diretórios.os.
walk()
walk()
Observe que a os.walk()
função examina toda a árvore de diretórios. Portanto, você pode usá-lo para obter todos os arquivos de todos os diretórios e seus subdiretórios de um diretório raiz.
Exemplo de arquivo de lista Python
Suponha que você tenha uma pasta D:\web
com os seguintes diretórios e arquivos:
D:\web
├── assets
| ├── css
| | └── style.css
| └── js
| └── app.js
├── blog
| ├── read-file.html
| └── write-file.html
├── about.html
├── contact.html
└── index.html
Linguagem de código: Python ( python )
O exemplo a seguir mostra como usar a os.walk()
função para listar todos os arquivos HTML do D:\web
diretório:
import os
path = 'D:\\web'
html_files = []
for dirpath, dirnames, filenames in os.walk(path):
for filename in filenames:
if filename.endswith('.html'):
html_files.append(os.path.join(dirpath, filename))
for html_file in html_files:
print(html_file)
Linguagem de código: Python ( python )
Saída:
D:\web\about.html
D:\web\contact.html
D:\web\index.html
D:\web\blog\read-file.html
D:\web\blog\write-file.html
Linguagem de código: Python ( python )
Como funciona.
Primeiro, inicialize uma lista para armazenar o caminho dos arquivos HTML:
html_files = []
Linguagem de código: Python ( python )
Segundo, chame os.walk()
a função para examinar os diretórios da D:\web
pasta:
for dirpath, dirnames, filenames in os.walk(path):
Linguagem de código: Python ( python )
O dirpath
armazena o diretório e os nomes dos arquivos armazenam os arquivos nesse diretório.
Terceiro, faça um loop nos nomes dos arquivos e adicione-os à html_files
lista se suas extensões forem .html
:
# ...
for filename in filenames:
if filename.endswith('.html'):
html_files.append(os.path.join(dirpath, filename))
Linguagem de código: Python ( python )
Observe que os.path.join()
retorna o caminho completo do nome do arquivo juntando o dirpath ao nome do arquivo.
Finalmente, imprima os nomes dos arquivos na html_files
lista:
for html_file in html_files:
print(html_file)
Linguagem de código: Python ( python )
Definindo uma função de lista de arquivos reutilizáveis
Usando a os.walk()
função, podemos definir uma list_files()
função reutilizável como esta:
import os
def list_files(path, extentions=None):
""" List all files in a directory specified by path
Args:
path - the root directory path
extensions - a iterator of file extensions to include, pass None to get all files.
Returns:
A list of files specified by extensions
"""
filepaths = []
for root, _, files in os.walk(path):
for file in files:
if extentions is None:
filepaths.append(os.path.join(root, file))
else:
for ext in extentions:
if file.endswith(ext):
filepaths.append(os.path.join(root, file))
return filepaths
if __name__ == '__main__':
filepaths = list_files(r'D:\web', ('.html', '.css'))
for filepath in filepaths:
print(filepath)
Linguagem de código: Python ( python )
Saída:
D:\web\about.html
D:\web\contact.html
D:\web\index.html
D:\web\assets\css\style.css
D:\web\blog\read-file.html
D:\web\blog\write-file.html
Linguagem de código: Python ( python )
Faça com que os arquivos de lista funcionem de forma mais eficiente
Se o número de arquivos for pequeno, a list_files()
função funciona bem. No entanto, quando o número de arquivos é grande, retornar uma lista grande de arquivos não consome muita memória.
Para resolver isso, você pode usar um gerador para gerar cada arquivo por vez, em vez de retornar uma lista:
import os
def list_files(path, extentions=None):
""" List all files in a directory specified by path
Args:
path - the root directory path
extensions - a iterator of file extensions to include, pass None to get all files.
Returns:
A list of files specified by extensions
"""
for root, _, files in os.walk(path):
for file in files:
if extentions is None:
yield os.path.join(root, file)
else:
for ext in extentions:
if file.endswith(ext):
yield os.path.join(root, file)
if __name__ == '__main__':
filepaths = list_files(r'D:\web', ('.html', '.css'))
for filepath in filepaths:
print(filepath)
Linguagem de código: Python ( python )
Resumo
- Use a
os.walk()
função para listar arquivos em um diretório recursivamente. - Defina uma função reutilizável para listar arquivos em um diretório usando a
os.walk()
função.