X Tutup
Skip to content

Latest commit

 

History

History
354 lines (261 loc) · 7.68 KB

File metadata and controls

354 lines (261 loc) · 7.68 KB
title Módulo OS Python - Folha de Dicas Python
description Este módulo oferece uma forma portátil de usar funcionalidades dependentes do sistema operacional.
Módulo OS Python

Este módulo fornece uma maneira portátil de usar funcionalidades dependentes do sistema operacional.

Pathlib vs Módulo OS O módulo pathlib fornece muito mais funcionalidades do que as listadas aqui, como obter o nome do arquivo, obter a extensão do arquivo, ler/escrever um arquivo sem abri-lo manualmente, etc. Consulte a documentação oficial se você pretende saber mais.
Para uma análise mais aprofundada de ambos, consulte a página Caminhos de Arquivos e Diretórios.

Caminhos no Linux e Windows

No Windows, os caminhos são escritos usando barras invertidas (\) como separador entre os nomes das pastas. Em sistemas operacionais baseados em Unix, como macOS, Linux e BSDs, a barra normal (/) é usada como separador de caminho. Juntar caminhos pode ser um problema se o seu código precisar funcionar em diferentes plataformas.

Felizmente, o Python nos fornece os.path.join para lidar com isso.

import os

# Junta componentes de caminho usando o separador correto para o SO
os.path.join('usr', 'bin', 'spam')
usr\bin\spam

Juntar caminhos é útil se você precisar criar diferentes caminhos de arquivo sob o mesmo diretório.

my_files = ['accounts.txt', 'details.csv', 'invite.docx']

# Junta cada nome de arquivo com o diretório base
for filename in my_files:
    print(os.path.join('/home/labex/project', filename))
/home/labex/project/accounts.txt
/home/labex/project/details.csv
/home/labex/project/invite.docx

O diretório de trabalho atual

import os

# Obtém o diretório de trabalho atual
os.getcwd()
/home/labex/project
# Altera o diretório de trabalho atual
os.chdir('/usr/bin')

# Verifica a alteração
os.getcwd()
/usr/bin

Criação de novas pastas

import os
# Cria diretórios recursivamente (cria todos os diretórios pais se necessário)
os.makedirs('/tmp/delicious/walnut/waffles')

Caminhos Absolutos vs. Relativos

Existem duas maneiras de especificar um caminho de arquivo.

  • Um caminho absoluto, que sempre começa com a pasta raiz
  • Um caminho relativo, que é relativo ao diretório de trabalho atual do programa

Existem também as pastas ponto (.) e ponto-ponto (..). Estas não são pastas reais, mas nomes especiais que podem ser usados em um caminho. Um único ponto (“dot”) para um nome de pasta é um atalho para “este diretório”. Dois pontos (“dot-dot”) significam “a pasta pai”.

Lidando com caminhos absolutos

Para ver se um caminho é um caminho absoluto:

import os
# Verifica se o caminho é absoluto (começa com a raiz)
os.path.isabs('/')
True
# Caminhos relativos retornam False
os.path.isabs('..')
False

Você também pode extrair um caminho absoluto:

import os
# Obtém o diretório atual primeiro
os.getcwd()
/home/labex/project
# Converte caminho relativo para caminho absoluto
os.path.abspath('..')
/home

Lidando com caminhos relativos

Você pode obter um caminho relativo de um caminho inicial para outro caminho.

import os
# Obtém o caminho relativo do caminho inicial para o caminho de destino
os.path.relpath('/etc/passwd', '/')
etc/passwd

Validade de Caminho e Arquivo

Verificando se um arquivo/diretório existe

import os

# Verifica se o caminho existe (arquivo ou diretório)
os.path.exists('.')
True
os.path.exists('setup.py')
True
os.path.exists('/etc')
True
os.path.exists('nonexistentfile')
False

Verificando se um caminho é um arquivo

import os

# Verifica se o caminho é um arquivo
os.path.isfile('setup.py')
True
os.path.isfile('/home')
False
os.path.isfile('nonexistentfile')
False

Verificando se um caminho é um diretório

import os

# Verifica se o caminho é um diretório
os.path.isdir('/')
True
os.path.isdir('setup.py')
False
os.path.isdir('/spam')
False

Obtendo o tamanho de um arquivo em bytes

import os

# Obtém o tamanho do arquivo em bytes
os.path.getsize('/usr/bin/python3')
776192

Listando diretórios

import os

# Lista todos os arquivos e diretórios no caminho especificado
os.listdir('/usr/bin')
['0409', '12520437.cpx', '12520850.cpx', '5U877.ax', 'aaclient.dll',
--snip--
'xwtpdui.dll', 'xwtpw32.dll', 'zh-CN', 'zh-HK', 'zh-TW', 'zipfldr.dll']

Tamanhos de arquivos de diretório

AVISO Diretórios também têm um tamanho! Portanto, você pode querer verificar se um caminho é um arquivo ou diretório usando os métodos discutidos na seção anterior.
import os
total_size = 0

# Calcula o tamanho total de todos os arquivos no diretório
for filename in os.listdir('/usr/bin'):
    # Junta o caminho do diretório com o nome do arquivo e obtém o tamanho
    total_size = total_size + os.path.getsize(os.path.join('/usr/bin', filename))
print(total_size)
1117846456

Excluindo arquivos e pastas

  • Chamar os.unlink(path) excluirá o arquivo no caminho.

  • Chamar os.rmdir(path) excluirá a pasta no caminho. Esta pasta deve estar vazia de quaisquer arquivos ou pastas.

Percorrendo uma Árvore de Diretórios

import os

# Percorre a árvore de diretórios recursivamente
for folder_name, subfolders, filenames in os.walk('/tmp/delicious'):
    print(f'A pasta atual é {folder_name}')
    # Itera sobre subdiretórios
    for subfolder in subfolders:
        print(f'SUBPASTA DE {folder_name}: {subfolder}')
    # Itera sobre nomes de arquivos
    for filename in filenames:
        print(f'ARQUIVO DENTRO DE {folder_name}: filename{filename}')
    print('')
A pasta atual é /tmp/delicious
SUBPASTA DE /tmp/delicious: cats
SUBPASTA DE /tmp/delicious: walnut
ARQUIVO DENTRO DE /tmp/delicious: spam.txt

A pasta atual é /tmp/delicious/cats
ARQUIVO DENTRO DE /tmp/delicious/cats: catnames.txt
ARQUIVO DENTRO DE /tmp/delicious/cats: zophie.jpg

A pasta atual é /tmp/delicious/walnut
SUBPASTA DE /tmp/delicious/walnut: waffles

A pasta atual é /tmp/delicious/walnut/waffles
ARQUIVO DENTRO DE /tmp/delicious/walnut/waffles: butter.txt

Links relevantes

  • Folha de Cola: Caminho de Arquivo e Diretório
  • Folha de Cola: Leitura e Escrita de Arquivos
  • Blog: Essenciais do Pathlib
  • Módulo: pathlib
  • open()
  • str()
X Tutup