Manipulação de Arquivos e Pastas

PythonBeginner
Pratique Agora

Introdução

Este laboratório foi projetado para ajudá-lo a entender como manipular arquivos e pastas usando Python. Usaremos os módulos os e glob, que fornecem uma maneira de interagir com o sistema de arquivos e realizar operações comuns, como criar, excluir e mover arquivos e diretórios.

Conquistas

  • Módulo os
  • Módulo glob

Criando Pastas e Arquivos

Aqui está um código Python que cria múltiplos grupos de pastas e arquivos de exemplo:

import os

## Create multiple groups of sample folders and files
for i in range(3):
    ## Create a new folder for each group
    folder_name = "group_" + str(i)
    os.makedirs(folder_name)

    ## Create sample files within each folder
    for j in range(3):
        file_name = "file_" + str(j) + ".txt"
        file_path = os.path.join(folder_name, file_name)
        with open(file_path, "w") as file:
            file.write("This is a sample file.")

Você pode abrir create_samples.py no editor e executar o código para ver os resultados.

os.makedirs(path) é uma função do módulo os em Python que cria um diretório no caminho especificado. Neste caso, o path é o folder_name, que é construído concatenando a string "group_" com o valor atual da variável i do loop for externo, resultando em "group_0", "group_1" e "group_2".

os.path.join(path1, path2, ...) é uma função do módulo os.path que junta um ou mais caminhos. Neste caso, path1 é o folder_name e path2 é o file_name, que é construído concatenando a string "file_" com o valor atual da variável j do loop for interno, resultando em "file_0.txt", "file_1.txt" e "file_2.txt". A função os.path.join() é usada para concatenar o nome da pasta e o nome do arquivo para criar o caminho completo do arquivo, de modo que o arquivo possa ser criado dentro da pasta.

Ao usar a função os.path.join, o código garante que o separador correto para o sistema operacional atual seja usado para juntar os nomes da pasta e do arquivo, independentemente de o código ser executado no Windows, Linux ou macOS.

Mais sobre o Módulo Os

O módulo os em Python fornece uma maneira de interagir com o sistema operacional, permitindo que você execute várias tarefas, como criar e excluir diretórios, ler e escrever arquivos e executar comandos.

Abra um novo interpretador Python.

python3

Aqui estão alguns exemplos de outras funções úteis fornecidas pelo módulo os:

  • os.listdir(path): Retorna uma lista de todos os arquivos e diretórios no diretório especificado.

    os.listdir('.') ## retorna uma lista de todos os arquivos e diretórios no diretório atual
  • os.remove(path): Exclui o arquivo no caminho especificado.

    os.remove('file.txt') ## exclui o arquivo chamado 'file.txt'
  • os.rmdir(path): Exclui o diretório vazio no caminho especificado.

    os.rmdir('folder') ## exclui a pasta vazia chamada 'folder'
  • os.rename(src, dst): Renomeia um arquivo ou diretório do caminho src para o caminho dst.

    os.rename('file1.txt', 'file2.txt') ## renomeia o arquivo 'file1.txt' para 'file2.txt'
  • os.chdir(path): Altera o diretório de trabalho atual para o caminho especificado.

    os.chdir('/home/user/documents') ## altera o diretório de trabalho atual para '/home/user/documents'
  • os.getcwd(): Retorna o diretório de trabalho atual.

    os.getcwd() ## retorna o diretório de trabalho atual, por exemplo, '/home/user/documents'

Observe que a maioria das funções acima irá lançar uma exceção (FileNotFoundError, OSError, etc.) se o arquivo ou diretório especificado não existir ou se você não tiver as permissões necessárias.

Percorrendo uma Árvore de Diretórios

os.walk(top, topdown=True, onerror=None, followlinks=False) é uma função do módulo os em Python que gera os nomes de arquivos em uma árvore de diretórios, percorrendo a árvore de cima para baixo (top-down) ou de baixo para cima (bottom-up). Por padrão, os.walk() gera os nomes de arquivos em uma árvore de diretórios de cima para baixo. Para cada diretório na árvore enraizada no diretório top (incluindo o próprio top), ele produz uma tupla de 3 elementos (dirpath, dirnames, filenames).

Aqui está um exemplo de como você pode usar os.walk() para imprimir todos os arquivos em um diretório e seus subdiretórios:

import os

## Print all files in a directory and its subdirectories
for root, dirs, files in os.walk('.'):
    for file in files:
        print(os.path.join(root, file))

Este código começará no diretório atual (indicado por '.') e percorrerá recursivamente todos os subdiretórios, imprimindo o caminho completo de cada arquivo que encontrar.

Aqui está outro exemplo onde você pode usar os.walk() para procurar um arquivo específico com uma extensão específica em um diretório:

import os

def search_file(directory, file_extension):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(file_extension):
                print(os.path.join(root, file))

search_file('.','.txt')

Isso procurará todos os arquivos com a extensão '.txt' e imprimirá o caminho completo do arquivo.

os.walk() é uma função poderosa que pode ser usada para muitas tarefas, como pesquisar arquivos, analisar estruturas de diretórios e muito mais.

Vale a pena notar que os.walk é um gerador (generator), o que significa que ele gera os valores em tempo real, em vez de mantê-los todos na memória. Isso o torna eficiente para lidar com grandes árvores de diretórios.

O Módulo Glob

O módulo glob em Python fornece uma maneira de pesquisar arquivos e diretórios usando caracteres curinga (wildcard characters). glob.glob(pathname) retorna uma lista de caminhos de arquivos que correspondem ao padrão de nome de arquivo especificado.

Aqui está um exemplo de como você pode usar glob.glob() para encontrar todos os arquivos com a extensão ".txt" no diretório atual:

import glob

txt_files = glob.glob('*.txt')
print(txt_files)

Este código procurará todos os arquivos com a extensão ".txt" no diretório atual e retornará uma lista de caminhos de arquivos que correspondem ao padrão.

É semelhante à função os.walk(), mas não pesquisa recursivamente nos subdiretórios. Ele apenas procura arquivos que correspondam ao padrão especificado no diretório atual.

Aqui está um exemplo de como você pode usar glob.glob() para encontrar todos os arquivos com a extensão ".txt" em todos os subdiretórios:

import glob

txt_files = glob.glob('**/*.txt', recursive=True)
print(txt_files)

Este código procurará todos os arquivos com a extensão ".txt" no diretório atual e em todos os subdiretórios.

Em geral, glob.glob() é mais conveniente quando você está procurando apenas arquivos em um diretório e seus subdiretórios. No entanto, os.walk() é mais poderoso e flexível, pois pode ser usado para pesquisar arquivos em vários diretórios ou para analisar a estrutura de uma árvore de diretórios.

Vale a pena notar que, como os.walk, o glob também é um gerador (generator), o que significa que ele gera os valores em tempo real, em vez de mantê-los todos na memória. Isso o torna eficiente para lidar com um grande número de arquivos.

Resumo

Neste laboratório, aprendemos como usar Python para manipular arquivos e pastas usando os módulos os e glob. Cobrimos como criar uma nova pasta, alterar o diretório de trabalho atual, criar um novo arquivo, escrever em um arquivo, fechar um arquivo, listar o conteúdo de um diretório e encontrar arquivos que correspondam a um determinado padrão usando glob.