Arquivos de lista Python

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:\webcom 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.htmlLinguagem 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:\webdiretó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.htmlLinguagem 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:\webpasta:

for dirpath, dirnames, filenames in os.walk(path):Linguagem de código:  Python  ( python )

O dirpatharmazena 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_fileslista 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_fileslista:

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.htmlLinguagem 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *