Manipulação do sistema de ficheiros do disco
A manipulação de ficheiros e pastas em Python é um requisito essencial para diversos tipos de aplicações. O Python oferece várias bibliotecas para trabalhar com o sistema de ficheiros, como os
, pathlib
e shutil
.
Módulo os
– Operações com pastas e ficheiros
Obter a pasta atual
import os
print(os.getcwd()) # Retorna a pasta atual
Mudar de pasta
import os
os.chdir('novo_caminho') # Muda para outra pasta
print(os.getcwd())
Criar uma pasta
import os
os.mkdir('novo_diretorio') # Cria um diretório no caminho especificado
Listar ficheiros e subpastas
import os
print(os.listdir()) # Lista os itens na pasta atual
Eliminar um ficheiro
import os
os.remove("dados.txt")
Eliminar uma pasta vazia
import os
os.rmdir("imagens")
NOTA: para removermos uma pasta não vazia, devemos usar o método rmtree() do módulo shutil.
Renomear ficheiro ou pasta
import os
#Renomeia a pasta "imagens" para "videos"
os.rename("imagens", "videos")
Caminhos de ficheiros
import os
path = "/home"
file_path = os.path.join(path, "mycomputer", "codenet", "python.txt")
print(file_path)
Output:
/home/mycomputer/codenet/python.txt
Remover todos os ficheiros de uma pasta
import os
def delete_files_in_directory(directory_path):
try:
files = os.listdir(directory_path)
for file in files:
file_path = os.path.join(directory_path, file)
if os.path.isfile(file_path):
os.remove(file_path)
print("Ficheiros eliminados com sucesso.")
except OSError:
print("Erro na eliminação dos ficheiros.")
# Uso
directory_path = '/path/to/directory'
delete_files_in_directory(directory_path)
Módulo pathlib
O módulo pathlib
foi introduzido no Python 3.4 e revolucionou a forma como lidamos com caminhos de ficheiros e diretórios, oferecendo uma abordagem orientada a objetos, multiplataforma e muito mais intuitiva do que o uso de strings tradicionais
A classe Path, do módulo pathlib, representa um caminho no sistema de ficheiros, seja ele absoluto ou relativo.
Criando objetos Path
from pathlib import Path
# Caminho relativo
p = Path("meu_ficheiro.txt")
# Caminho absoluto
p_abs = Path("/home/utilizador/documentos")
# Caminho do ficheiro atual
p_atual = Path(__file__)
# Pasta atual e pasta home
p_cwd = Path.cwd()
p_home = Path.home()
Podemos combinar caminhos facilmente usando o operador /
:
p_home = Path.home()
novo_caminho = p_home / "projetos" / "python"
Propriedades e métodos uteis
Propriedades
name
: nome do ficheirostem
: nome sem extensãosuffix
: extensãoparent
: diretório paiparts
: tupla com cada parte do caminho
from pathlib import Path
p = Path("/home/utilizador/documentos/dados.txt")
print(p.name) # 'dados.txt'
print(p.stem) # 'dados'
print(p.suffix) # '.txt'
print(p.parent) # \home\utilizador\documentos
Métodos
exists()
: verifica se o caminho existeis_file()
: verifica se é ficheirois_dir()
: verifica se é diretório
from pathlib import Path
p = Path("/home/utilizador/documentos/dados.txt")
if p.exists():
print("Existe!")
else:
print("Não existe")
Listar conteúdo de uma pasta
from pathlib import Path
pasta = Path("c:\\python\\sintaxe")
for py_file in pasta.iterdir():
print(py_file)
Listar conteúdo de uma pasta por padrão
from pathlib import Path
pasta = Path("c:\\python\\sintaxe")
for py_file in pasta.glob("*.py"):
print(py_file)
Criar pasta
nova_pasta = Path("nova_pasta")
nova_pasta.mkdir(exist_ok=True)
O parâmetro exist_ok=True implica qeu a pasta só é criada se não existir.
Remover ficheiro
from pathlib import Path
# Especifica o caminho do ficheiro
file_path = Path('example.txt')
# Verifica se o ficheiro existe antes de o eliminar
if file_path.exists():
# Elimina o ficheiro
file_path.unlink()
print(f"{file_path} eliminado.")
else:
print(f"{file_path} inexistente.")
Remover pasta vazia
from pathlib import Path
# Especifica caminho da pasta
dir_path = Path(r”C:\ToDos\Archive”)
# Remove a pasta vazia
dir_path.rmdir()
# Report the result
print(f”‘{dir_path}’ eliminada!”)
NOTA: para removermos uma pasta não vazia, devemos usar o método rmtree() do módulo shutil.
Renomear ficheiro ou pasta
from pathlib import Path
path = Path("data.txt")
path.rename("dados.bin")
Módulo shutil
O módulo shutil
é essencial para operações de alto nível com arquivos e diretórios em Python, oferecendo funcionalidades como cópia, movimentação, exclusão e compactação de ficheiros.
O módulo shutil
faz parte da biblioteca padrão do Python e é usado para:
- Copiar ficheiros e diretórios.
- Mover ficheiros entre locais.
- Excluir árvores de diretórios.
- Compactar e descompactar ficheiros.
- Verificar espaço em disco.
Copiar ficheiros
O módulo shutil possui 3 métodos para copiar ficheiros:
shutil.copy(src, dst)
: Copia o conteúdo do ficheirosrc
paradst
(preserva permissões básicas).shutil.copy2(src, dst)
: Copia conteúdo e metadados (timestamps de modificação/acesso).shutil.copyfile(src, dst)
: Copia apenas o conteúdo (sem metadados).
Nenhum deste métodos copia pastas.
Exemplo 1:
import shutil
# Copiar ficheiro
shutil.copy('origem.txt', 'destino.txt')
# Copiar com metadados
shutil.copy2('origem.txt', 'backup.txt')
#Copia conteudo
shutil.copyfile('origem.txt', 'destino2.txt')
# Copiar ficheiro para pasta 'tmp'
shutil.copy('origem.txt', 'tmp')
Mover ficheiros
shutil.move('origem.txt', 'tmp') # Move ou renomeia
O exemplo acima move o ficheiro ‘origem.txt’ para a pasta ‘tmp’.
Remover pastas
Exemplo 1:
import shutil
shutil.rmtree("tmp")
O exemplo acima remove a pasta ‘tmp’. A pasta ‘tmp’ pode estar vazia ou com ficheiros e subpastas.
Exemplo 2:
import shutil
import os
# location
location = "C:/python/"
# directory
dir = "Sintaxe"
# path
path = os.path.join(location, dir)
# remove pasta
shutil.rmtree(path)
Copiar pastas
Exemplo 1:
# Copiar tudo, exceto arquivos .tmp e .log
shutil.copytree(
'tmp',
'backup_tmp'
)
Neste exemplo, copia todos os ficheiros da pasta ‘tmp’ para a pasta ‘backup_tmp.
Exemplo 2:
# Copiar tudo, exceto arquivos .tmp e .log
shutil.copytree(
'tmp',
'backup_tmp',
ignore=shutil.ignore_patterns('*.tmp', '*.log')
)
Neste exemplo, copia todos os ficheiros da pasta ‘tmp’ para a pasta ‘backup_tmp’, exceto os ficheiros com a extensão .py.
Tratamento de erros
try:
shutil.rmtree('imagens')
except shutil.Error as e:
print(f"Erro: {e.args[0]}")