import os
Isso lhe dará acesso a todas as funções definidas no os
módulo.
💡 Dica: este módulo já estava instalado quando você instalou o Python 3, então você poderá usá-lo imediatamente.
Para poder usar as funções do os
módulo, você precisará adicionar o prefixo os.
antes do nome da função que você deseja chamar, assim:
os.()
Por exemplo:
os.mkdir("New Folder")
Como importar funções individuais
Se você estiver trabalhando apenas com uma ou duas funções do módulo, poderá importá-las individualmente usando esta sintaxe:
from import , , ...
Por exemplo:
from os import listdir, system
Nesse caso, você pode chamar as funções em seu script como faria normalmente, sem adicionando o os.
prefixo, assim:
()
Por exemplo:
mkdir("New Folder")
Directory Diretório de trabalho atual
Agora vamos ver um conceito muito importante que você precisa conhecer antes de começar a trabalhar com listdir
e system
. Seu diretório de trabalho atual, como o nome indica, é o diretório (pasta) em que você está trabalhando no momento.
Você pode verificar seu diretório de trabalho atual com esta função no os
módulo:
os.getcwd()
Isso mostrará o caminho para o seu diretório de trabalho atual.
💡 Dica: cwd
significa “diretório de trabalho atual”.
Do Shell Interativo
Se eu executar este comando no shell interativo (Windows), vejo o seguinte:
>>> os.getcwd()'C:\Users\estef\AppData\Local\Programs\Python\Python38-32'
Este é o caminho completo para o meu diretório de trabalho atual:
'C:\Users\estef\AppData\Local\Programs\Python\Python38-32'
De um script
Se eu executar este comando a partir de um script, desta forma:
import osprint(os.getcwd())
Eu vejo:
C:UsersestefDocumentsfreeCodeCampfreeCodeCamp Newslistdir vs system
O caminho completo para o script (sua localização no sistema, na hierarquia de diretórios).
💡 Dica: Se você executar um script (um arquivo Python), seu diretório de trabalho atual será o diretório em que o script está atualmente.
Como alterar seu diretório de trabalho atual
Você pode alterar seu diretório de trabalho atual com este comando no diretório os
módulo:
os.chdir()
Você precisará especificar o caminho para o novo diretório de trabalho, transmitindo-o como argumento, formatado como uma sequência. Pode ser um caminho absoluto ou um caminho relativo.
💡 Dica:
- A caminho absoluto especifica toda a sequência de diretórios que você precisa percorrer para alcançar seu diretório de destino. Esse caminho começa no diretório raiz do seu sistema.
Por exemplo:
>>> import os>>> os.chdir(r"C:UsersestefDocumentsFreeCodeCampfreeCodeCamp News9 - listdir vs system")# Checking current working directory:>>> os.getcwd()'C:\Users\estef\Documents\FreeCodeCamp\freeCodeCamp News\9 - listdir vs system'
Observe que eu adicionei um r
antes do caminho absoluto para converter a sequência em uma sequência bruta. Se você usar e você não adiciona o
r
, você receberá um erro porque o O símbolo será tratado como um caractere especial.
Como alternativa, você pode substituir as barras invertidas com barras
/
no caminho:
>>> os.chdir("C:/Users/estef/Documents/FreeCodeCamp/freeCodeCamp News/9 - listdir vs system")# Checking current working directory>>> os.getcwd()'C:\Users\estef\Documents\FreeCodeCamp\freeCodeCamp News\9 - listdir vs system'
- UMA caminho relativo especifica o caminho que você deseja seguir para encontrar o diretório de destino, mas agora o caminho começa no seu atual diretório de trabalho. É mais curto e mais simples que o caminho absoluto.
Por exemplo, se seu diretório de trabalho atual contiver um subdiretório (pasta) Directory 1
, você pode mover-se para esse diretório usando um caminho relativo (imagine-o como uma pasta dentro de outra pasta, e estamos indo cada vez mais fundo na hierarquia), assim:
>>> import os>>> os.chdir(".Directory 1")# Check current working directory>>> os.getcwd()'C:\Users\estef\Documents\FreeCodeCamp\freeCodeCamp News\9 - listdir vs system\Directory 1'
💡 Dica: O ponto (.
) no início do caminho relativo .Directory 1
representa o diretório de trabalho atual. Um ponto duplo ( ..
) é usado para mover a hierarquia para o diretório “pai”.
Agora que você tem todo o conhecimento necessário para entender realmente como listdir
e system
trabalho, vamos vê-los em detalhes.
🔸 Listdir
Vamos começar com o listdir
função. Vamos revelar seus mistérios. 🔮
Finalidade e valor de retorno
De acordo com Documentação Python, o objetivo desta função é:
Retorne uma lista contendo os nomes das entradas no diretório fornecido por caminho.
Basicamente, essa função retorna uma lista com os nomes de todos os arquivos e diretórios encontrados atualmente em um diretório específico que você especifica quando chama a função.
💡 Dica: A lista não terá uma ordem específica, mesmo que você ordene os elementos em ordem alfabética.
Sintaxe e Parâmetro
Chamar listdir
, precisará usar esta sintaxe:
O parâmetro path
é precisamente isso, o caminho absoluto ou relativo para o diretório que você deseja visualizar. No Python 3.2 e acima, esse parâmetro é opcional. Por padrão, o caminho levará ao seu diretório de trabalho atual se você não passar um argumento.
Lembre-se de que você deve importar o os
módulo antes de chamar esta função.
💡 Dica: Se você usar esta declaração de importação from os import listdir
para importar a função individualmente, você pode omitir o os.
prefixo, assim:
Casos de uso e vantagens
A função listdir
é muito útil porque funciona em qualquer sistema operacional em que o Python seja executado; portanto, se o Python estiver instalado no seu dispositivo, essa função funcionará corretamente.
Agora vamos falar um pouco sobre seu valor de retorno. Como ele retorna uma lista, podemos armazenar essa lista em uma variável e trabalhar com ela em nosso programa.
Por exemplo, digamos que queremos fazer algo com todos os arquivos de um determinado diretório, como converter imagens em preto e branco ou modificar seu conteúdo. Poderíamos fazer isso usando um loop for, assim:
images = os.listdir()for image in images: # Do something to the image
Obviamente, você precisaria definir o que acontece dentro do loop, mas este é um exemplo do que você poderia fazer com essa função.
Isso é demais, certo?
Mas ter arquivos e diretórios na mesma lista pode ser um pouco problemático se quisermos trabalhar com um loop for, certo? Nós precisaríamos adicionar um condicional para verificar o tipo de cada elemento. Como podemos fazer uma lista que contém apenas nomes de arquivos (sem diretórios) ou vice-versa?
Vamos ver! ✨
Incluir apenas arquivos
Se você deseja “filtrar” a lista retornada por os.listdir()
para incluir apenas arquivos (sem diretórios), você pode usar esta linha de código:
list(filter(os.path.isfile, os.listdir()))
💡 Dica: Você pode personalizar o
argumento ou omita-o para usar seu diretório de trabalho atual.
Vamos ver um exemplo com meu diretório de trabalho atual (estou usando o Windows):
Meu diretório (pasta) possui:
- Dois subdiretórios (pastas na pasta principal)
- Um arquivo do PowerPoint
- Uma imagem (arquivo .png)
- Um script Python
Se eu ligar para o listdir
função do script.py
arquivo e imprima a lista retornada:
print(os.listdir())
Esta é a saída:
['Diagrams.ppt', 'Directory 1', 'Directory 2', 'listdir vs system.png', 'script.py']
Você pode ver que todos os arquivos e diretórios do meu diretório de trabalho atual foram incluídos.
Para filtrar a lista para conter apenas arquivos, podemos usar esta instrução:
print(list(filter(os.path.isfile, os.listdir())))
Agora a saída é:
['Diagrams.ppt', 'listdir vs system.png', 'script.py']
Observe como os diretórios foram “filtrados”, exatamente o que queríamos.
Incluir apenas diretórios
Da mesma forma, se você deseja “filtrar” a lista para incluir apenas diretórios, você pode usar esta linha de código:
list(filter(os.path.isdir, os.listdir()))
Agora a saída é:
['Directory 1', 'Directory 2']
Exatamente o que queríamos. Mas como essa declaração funciona nos bastidores? Vamos ver.
Quão filter()
Trabalhos nos bastidores
A função de filtro é chamada usando esta sintaxe:
filter(, )
Basicamente, “filtra” os elementos do segundo argumento (a lista) com base no valor de verdade retornado chamando a função passada como o primeiro argumento (os.path.isfile()
ou os.path.isdir()
em seus respectivos comandos):
print(list(filter(os.path.isfile, os.listdir())))
list(filter(os.path.isdir, os.listdir()))
Estas duas funções:
os.path.isfile()os.path.isdir()
Retorna True
se o argumento for um arquivo ou um diretório, respectivamente.
Com base nesses valores verdadeiros, os elementos da lista serão incluídos (ou não) na lista final “filtrada”. Os elementos da lista retornados por os.listdir()
são passados um a um para essas funções para verificar se são arquivos (ou diretórios, respectivamente).
Por exemplo: Se tivermos esta linha de código:
filter(os.path.isfile, os.listdir())))
E os.listdir()
retorna esta lista:
['Diagrams.ppt', 'Directory 1', 'Directory 2', 'script.py']
O primeiro elemento da lista ('Diagrams.ppt'
) é passado como argumento para os.path.isfile()
para verificar se é um arquivo:
os.path.isfile('Diagrams.ppt') # True
A chamada de função retorna True
, portanto, é um arquivo e é incluído na lista.
Mas se o elemento for um diretório:
os.path.isfile('Directory 1') # False
A chamada de função retorna False
, por isso não está incluído na lista. Esse processo continua para todos os elementos da lista até que a nova lista contenha apenas nomes de arquivos.
Então, desde filter()
retorna um iterável, fazemos uma lista a partir de iterável usando list()
:
list(filter(os.path.isfile, os.listdir()))
E imprimimos, pois estamos trabalhando com um arquivo Python (script):
print(list(filter(os.path.isfile, os.listdir())))
💡 Dica: Você pode identificar visualmente se um elemento da lista representa um arquivo ou um diretório, verificando se ele possui uma extensão (tipo) após seu nome. Por exemplo: Diagrams.ppt
tem um .ppt
extensão que informa que é um arquivo do PowerPoint, mas que um diretório não possui uma extensão, como 'Directory 1'
.
🔹 Sistema (“ls”)
Agora que você sabe trabalhar com listdir
, vamos ver como o system()
A função funciona nos bastidores e como você pode usá-la. 🔮
Objetivo
De acordo com Documentação Python, o objetivo do system()
função é:
Execute o comando (uma string) em um subshell
Basicamente, essa função pega um comando (como uma string) e o executa.
Nesse caso, o comando que estamos passando é 'ls'
, um comando Unix usado no Linux para exibir o conteúdo de um diretório como saída padrão.
Ao contrário listdir
, a system()
função não retornará uma lista se passarmos o 'ls'
comando, ele apenas exibição a lista de arquivos e diretórios como saída padrão. Portanto, você deve usá-lo se desejar apenas visualizar a lista sem realmente trabalhar com ela em seu programa.
Sintaxe e Parâmetro
Para chamar esta função, você precisará usar esta sintaxe:
Seu único argumento é o comando que você deseja executar formatado como uma string (entre aspas duplas ou aspas simples).
Particularmente, o ls
O comando permite ver o conteúdo do seu diretório de trabalho atual.
Por exemplo: se este é meu diretório de trabalho (três arquivos Python e um subdiretório):
E eu chamo de system()
função, assim:
>>> import os>>> os.system("ls")
Esta é a saída:
'Directory 1' 'file 1.py' 'file 2.py' main.py0
Podemos ver a saída padrão no console (a lista de arquivos e diretórios):
'Directory 1' 'file 1.py' 'file 2.py' main.py
e o valor de retorno:
0
💡 Nota: Para esses exemplos de system()
, estou trabalhando com uma ferramenta de linha de comando online chamada Repl.it, pois meu computador possui o Windows instalado e o comando ls
não é reconhecido pelo prompt de comando padrão.
Limitações
Uma das principais limitações desta função é que o comando passado como argumento deve ser reconhecido pelo sistema operacional ou ambiente com o qual você está trabalhando.
Por exemplo, o ls
comando não será reconhecido no Windows por padrão no prompt de comando. Você verá esse erro se tentar executá-lo:
‘ls’ não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote.
Um comando semelhante no Windows seria o 'dir'
comando:
os.system('dir')
💡 Dica: Existem maneiras alternativas de executar o ls
comando no Windows, como o uso de programas de terminal que reconhecem comandos do Unix, mas, por padrão, o Windows não reconhece o comando 'ls'
comando.
Valor de retorno
De acordo com Documentação Python:
No Unix, o valor de retorno é o status de saída do processo codificado no formato especificado para
wait()
.
e…
No Windows, o valor retornado é o retornado pelo shell do sistema após a execução comando.
💡 Dica: Observe que esta função não retorna uma lista. Ele simplesmente exibe a lista como saída padrão, para que você não possa armazená-la em uma variável como fez com listdir
.
Variações do ls
comando
Um recurso importante de os.system('ls')
é que ele tem muitas opções úteis e interessantes para personalizar a apresentação da saída. Vamos ver alguns deles.
Opção 1: Podemos mostrar mais informações sobre arquivos e diretórios, como tamanho, local e data e hora da modificação usando o comando ls -l
.
>>> import os>>> os.system('ls -l')total 12drwxr-xr-x 1 runner runner 0 Apr 3 18:23 'Directory 1'-rw-r--r-- 1 runner runner 11 Apr 3 18:38 'file 1.py'-rw-r--r-- 1 runner runner 11 Apr 3 18:38 'file 2.py'-rw-r--r-- 1 runner runner 11 Apr 3 18:38 main.py0
Opção 2: Para poder reconhecer diretórios visualmente mais rapidamente, podemos usar ls -F
, que adiciona uma barra /
até o final de seus nomes (consulte 'Directory 1/'
abaixo).
>>> import os>>> os.system('ls -F')'Directory 1'/ 'file 1.py' 'file 2.py' main.py0
Opção 3: Para classificar os arquivos por tamanho, podemos usar o comando ls -lS
.
>>> import os>>> os.system('ls -lS')total 12-rw-r--r-- 1 runner runner 11 Apr 3 18:38 'file 1.py'-rw-r--r-- 1 runner runner 11 Apr 3 18:38 'file 2.py'-rw-r--r-- 1 runner runner 11 Apr 3 18:38 main.pydrwxr-xr-x 1 runner runner 0 Apr 3 18:23 'Directory 1'0
Existem muitas outras opções de personalização que podem ser úteis para seu objetivo específico. Aqui você pode encontrar mais informações sobre a -ls
comando e como você pode usar todo o seu poder.
🔸 Resumo do listdir x sistema (“ls”)
- Objetivo:
listdir
retorna a lista de nomes de arquivos e diretórios no caminho especificado (por padrão, o diretório de trabalho atual) enquantosystem("ls")
apenas os exibe como saída padrão. - Sistema operacional:
listdir
pode ser usado independentemente do sistema operacional com o qual você está trabalhando. Em contraste,system('ls')
deve ser executado em um sistema operacional ou ambiente que reconheça a'ls'
comando. - Costumização: você pode filtrar a lista retornada por
listdir
se você precisar remover arquivos ou diretórios usando ofilter()
e você pode passar opções para personalizar a saída desystem('ls')
.
Eu realmente espero que você tenha gostado do meu artigo e que tenha sido útil. Agora você pode trabalhar com essas funções em seus projetos Python. Confira meus cursos on-line. Siga-me Twitter. 👍