Mandar um café pro programador

Pode me ajudar a transformar cafeína em código?

Módulo os : Caminhos, Endereços, Pastas e Diretórios

Neste Tutorial de Python, vamos te ensinar melhor como trabalhar com os endereços (ou seja, os caminhos, a localização) de arquivos em um sistema operacional, vamos aprender a navegar por pastas, criar diretórios, ver o tamanho dos arquivos, conteúdo de pastas e muito mais.

Tudo isso através do módulo os

Apostila de Python
Certificado do Curso

Acessando Outros Locais: path


Durante nossa seção de Arquivos em Python, sempre que abrimos nossos arquivos, fornecemos apenas o nome do arquivo de texto, para a função open()

Por exemplo, para ler um arquivo cujo nome é teste.txt, fazemos:
  • meuArquivo = open('teste.txt', 'r')

Ok, isso é certo e bonitinho se seu script Python estiver na mesma pasta ou diretório do arquivo de texto. Mas geralmente não é assim que se trabalha com arquivos.

As vezes nosso script está em:
C:\Python\scripts

E você quer hacker seu Windows lendo um arquivo:
C:\System32\teste.txt

E aí, como faz, José?

Simples, ao invoes de 'teste.txt', use o endereço completo (path) do arquivo:
  • meuArquivo = open('C:\\System32\\teste.txt', 'r')
Note que usamos duas barras.
Tente imprimir no Python: print('\')
Vai dar erro.

O motivo é que, para imprimir uma barra \ precisamos fazer \\ (lembra do caractere '\n', pois é, o caractere \ é representado por '\\').

Exercício de Arquivos
Crie um script que crie um arquivo de nome 'virus.txt' em sua área de trabalho, e ao abrir, esteja escrito o texto: "Você foi hackeado. Curso Python Progressivo"

Endereços nos Windows, Linux e Mac

Temos um pequeno 'problema' em relação aos endereços de arquivos e pastas, no que se refere a Linux/Mac e sistemas Windows.

Uma pasta do Windows: C:\Windows\Jose\Python
Um diretório no Linux : /home/user/Maria/Python
Ou seja, as barras são invertidas!

Se tentar acessar um endereço que não existe (como um C: no Linux ou /home no Windows) vai dar erro sim em seus scripts!

Assim, como bons programadores (afinal estudamos pelo curso Python Progressivo), temos que nos preparar para os dois sistemas, pois o Python por si só já tem um conceito de portabilidade e multiplataforma muito fortes, e devemos sempre ter isso em mente: nossos scripts devem rodar em qualquer sistema, até em Android se possível.

Vamos ver um 'truque' pra nos ajudar com isso, é a função os.path.join() do módulo os, que recebe várias strings, com os nomes das pastas e retorna uma string do endereço correto no sistema operacional de cada pessoa.

Por exemplo, se digitar: os.path.join('home', 'user','Maria')
Se estiver no Windows, a função retorna a string: 'home\\user\\Maria'
Se estiver no Linux, retorna a string: 'home//user//Maria'


Caminhos Absolutos e Relativos

Quando você instala um jogo, e quando você for criar seus games e softwares, a primeira coisa que vai pedir ao usuário, é o local no sistema dele onde vai instalar.

Se ele disser: C:\Jogos selecionando lá as janelinhas do explorer, você guarda numa variável:
path = 'C:\\Jogos" e pronto.

Vai criar a pasta de fases como? Assim: os.path.join(path, 'level')
Pronto, te retorna a string com o endereço absoluto completo (desde C:\ atéééé 'level')
E a pasta de personagens? Assim: os.path.join(path,'characters')

E a pasta do personagem 'Geddy'? os.path.join(path,'characters','Geddy')
E assim vai indo.


Note que não importa o que está na variável path, foi o usuário que escreveu.
Ela pode ser desde nada, vazia, até C:\usuario\secreto\porn\virus\nao_mexa'

Não importa, ok?
É por isso que te pedem pra navegar e escolher a pasta que vai querer instalar, pra você fornecer ao programa ou jogo, uma string com o caminho onde vão ficar as pastas e arquivos do soft.

Pasta atual: getcwd()

Rode o seguinte script em Python:

import os
print( os.getcwd() )

O resultado vai ser um endereço de sua máquina.
Qual? O endereço em que você está rodando seu script.

O comando getcwd(), do módulo os (de sistema operacional) retorna o diretório de trabalho atual (current working directory, cwd).

Como mudar de pasta: chdir()

Já o chdir recebe uma string, com um endereço pra onde você deseja ir.
Escolha um local, como sua área de trabalho (não sei que sistema você usa, nem suas pastas internas).

Como eu rodo Linux, vou dar uma passeada na minha pasta onde guardo meus scripts de Python.
Primeiro vou pra lá com chdir, depois printo o endereço de lá com getcwd, vejam meu código:

import os
os.chdir('//home//user//Python')
print( os.getcwd() )

Como ficou o de vocês, pra ir até sua pasta de scripts?

Como criar uma nova pasta: makedirs()

E que tal criar uma pasta, dentro do diretório atual?

Basta fornecer o endereço na formada de string, para a função makedirs()
Vamos criar uma pasta chamada 'arquivos', dentro da minha pasta de scripts Python, lá onde vou guardar meus scripts sobre arquivos, faço assim:

import os
os.makedirs('//home//user//Python//arquivos')

Crie uma sua também.
Depois vá lé e veja sua pasta criada.

Se não tivesse, por exemplo, a pasta 'Python', ele ia criar a 'Python' e depois a 'arquivos'.
Ele vai criando tudo, até criar a pasta existente que você deseja.

Basename e dirname

Se tiver uma string com endereço de um arquivo:
path = 'C:\\Estudo\\Python\\script.py'

E usar a função: os.path.basename(path)
Ele retorna: 'script.py', que é o nome de base.

Já se usar: os.path.dirname(path)
Ele retorna: "C:\\Estudo\\Python' , que é o nome do diretório do arquivo da base.

Se quiser os dois, use a função: os.path.split(path)
Que ela re torna uma tupla com os dois caminhos: ('C:\\Estudo\\Python', 'script.py'), prontinho pra você usar as duas informações.

Como Calcular o tamanho de um arquivo: getsize()

Tem uma função bem bacana no módulo os, chamada getsize, que como o nome diz, pega o tamanho do arquivo.

Se o nome do script que você está programando é arquivos.py, o código abaixo vai printar o tamanho em bytes desse arquivo, em seu sistema operacional:

import os
print( os.path.getsize('arquivos.py') )


Aqui deu 50, e aí?

Exibindo conteúdo de uma pasta ou diretório: listdir()
Se ao invés do endereço de um arquivo, você passar o caminho de uma pasta ou diretório, dessa vez pra função listdir, ele printar na sua tela todo o conteúdo daquela pasta.

Se usar Windows, teste o seguinte código:

import os
print( os.listdir('C:\\Windows\\System32') )

Se usar Linux, teste o seguinte código:

import os
print( os.listdir('//') )

Interessante e simples, não é?
São os arquivos mais importantes de seu sistema operacional, e agora estão sob seu poder...Mwahahahaha.

Não se assuste, programador é assim, tem poderes que os outros não tem.
Tem acesso, tem conhecimento e possibilidades que mais ninguém tem.

Exercício de Arquivos em Python
Crie um script em Python que liste todos os arquivos e diretórios de um determinado caminho, e calcule a soma de todos os arquivos em bytes.

Vamos armazenar os bytes na variável tamanho.
A função listdir  uma lista de nomes de arquivos.

Então, podemos usar um laço for, com uma variável temporária filename, que vai assumir o nome de cada arquivo desses, dessa lista. Usamos a função os.path.join() para obter o endereço completo de cada arquivo e usamos a getsize para obter o tamanho de cada um e somar na variável tamanho.

Veja como ficou nosso código Python


import os

tamanho = 0
for filename in os.listdir('C:\\Windows\\System32'):
    tamanho += os.path.getsize(os.path.join('C:\\Windows\\System32', filename))


print(tamanho)

Módulo OS

Existe ainda, uma série de outras funções e possibilidades, para se trabalhar com pastas e arquivos, pelo fantástico módulo os.

Recomendamos que, sempre que tiver alguma dúvida, consulte a documentação oficial da linguagem de programação Python:
https://docs.python.org/3/library/os.html

9 comentários:

  1. Melhor apostila de Python de todas!

    ResponderExcluir
  2. senhores tenho uma duvida se no caso eu quiser que quando ele renomeia a pasta ele pegue por exemplo um arquivo TXT, XML que seja com o nome para renomear a pasta por exemplo:
    tenho o diretório:
    //home//user//Python//arquivos\NovoNome.txt
    e dentro do diretório tenho um arquivo .txt com nome atual
    e quero que ele identifique esse TXT e renomeie essa pasta para:
    //home//user//Python//NovoNome
    isso a partir do TXT ou pode ser XML como seria estes procedimento

    ResponderExcluir
  3. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  4. Este comentário foi removido por um administrador do blog.

    ResponderExcluir
  5. Muito bom. Sabe se é possível salvar um arquivo diretamente em uma pasta no momento do download usando pyautogui e os?

    ResponderExcluir
  6. Como faço para utilizar um caminho que está na rede? Para abrir um arquivo, por exemplo.

    ResponderExcluir
  7. estou iniciando no python e gostaria de poder usar o valor dessa variável : PASTA_NOVA = (f"{BK}{dataf},") que é 'BK' + A DATA DO DIA FORMATADA, tudo junto, para criar uma subpasta do Windows. É possível ? já fiz isto usando uma rotina em um arquivo 'BAT' .

    ResponderExcluir

Bora fazer evoluir o ensino da Programação no Brasil ?

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo