<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Marcelo Gimenes de Oliveira - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Marcelo Gimenes de Oliveira - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 15 Jul 2026 19:22:38 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/author/marcelo/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Métodos de array em Java – como imprimir um array em Java ]]>
                </title>
                <description>
                    <![CDATA[ Um array é uma estrutura de dados utilizada para armazenar dados de um mesmo tipo. Arrays armazenam seus elementos na memória de modo contíguo. Em Java, arrays são objetos. Todos os métodos da classe dos objetos podem ser invocados em um array. Podemos armazenar um número fixo de elementos em ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/metodos-de-array-em-java-como-imprimir-um-array-em-java/</link>
                <guid isPermaLink="false">631a10a9281b1606c8fcd5c1</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Marcelo Gimenes de Oliveira ]]>
                </dc:creator>
                <pubDate>Tue, 27 Dec 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/11/Untitled-design--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/java-array-methods-how-to-print-an-array-in-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Java Array Methods – How to Print an Array in Java</a>
      </p><p>Um array é uma estrutura de dados utilizada para armazenar dados de um mesmo tipo. Arrays armazenam seus elementos na memória de modo contíguo.</p><p>Em Java, arrays são objetos. Todos os métodos da classe dos objetos podem ser invocados em um array. Podemos armazenar um número fixo de elementos em um array.</p><p>Vamos declarar um array de um tipo primitivo simples:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};</code></pre><p>Agora, vamos tentar imprimi-lo com o método <code>System.out.println()</code>:</p><pre><code class="language-java">System.out.println(intArray);
// Resultado: [I@74a14482</code></pre><p>Por que o Java não imprimiu nosso array? O que está acontecendo por baixo dos panos?</p><p>O método <code>System.out.println()</code> converte o objeto que passamos para uma string chamando o método <code>String.valueOf()</code>. Se olharmos para a implementação do método <code>String.valueOf()</code>, veremos isso:</p><pre><code class="language-java">public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
}</code></pre><p>Se o objeto passado é <code>null</code> ele retorna <em>null</em>. Senão, ele chama <code>obj.toString()</code>. No final, <code>System.out.println()</code> chama <code>toString()</code> para imprimir a saída.</p><p>Se a classe daquele objeto não sobrescreve a implementação de <code>Object.toString()</code>, ele chamará o método <code>Object.toString()</code>.</p><p><code>Object.toString()</code> retorna <code>getClass().getName()+</code><strong><strong><strong><strong><code>‘@’</code></strong></strong></strong></strong><code>+Integer.toHexString(hashCode())</code>. Em outras palavras, ele simplesmente retornará: "nome_da_classe@código_hash_do_objeto".</p><p>No nosso resultado anterior <code>[I@74a14482</code> , o <code>[</code> constata que isso é um array, e <code>I</code> significa int (número inteiro, o tipo do array). <code>74a14482</code> é a representação em hexadecimal sem sinal do código hash do array.</p><p>Sempre que criarmos nossas próprias classes, é uma boa prática sobrescrever o método <code>Object.toString()</code>.</p><p>Não podemos imprimir arrays em Java simplesmente usando o método <code>System.out.println()</code>. Em vez disso, essas são algumas maneiras de imprimir um array:</p><ol><li>Laços: laço <em>for</em> e laço <em>for-each</em></li><li>Método <code>Arrays.toString()</code></li><li>Método <code>Arrays.deepToString()</code></li><li>Método <code>Arrays.asList()</code></li><li>Interface Iterator do Java</li><li>API Stream do Java</li></ol><p>Vamos vê-las uma por uma.</p><h1 id="1-la-os-la-o-for-e-la-o-for-each"><strong>1. Laços: laço <em>for</em> e laço <em>for-each</em></strong></h1><p>Aqui está um exemplo de um laço <em>for</em>:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i=0; i&lt;intArray.length; i++){
    System.out.print(intArray[i]);
    // Resultado: 25461234
}</code></pre><p>Todas as classes <em>wrapper </em>sobrescrevem <code>Object.toString()</code> e retornam uma representação dos seus valores em string.</p><p>Aqui está um laço for-each:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};

for(int i: intArray){
    System.out.print(i);
    // Resultado: 25461234
}</code></pre><h1 id="2-m-todo-arrays-tostring-"><strong>2. Método Arrays.toString()</strong></h1><p><code>Arrays.toString()</code> é um método estático da classe Arrays que pertence ao pacote <code>java.util</code>. Ele retorna uma representação em string do conteúdo do array especificado. Podemos imprimir arrays unidimensionais usando esse método.</p><p>Os elementos do array são convertidos para string usando o método <code>String.valueOf()</code>, desta forma:</p><pre><code class="language-java">int[] intArray = {2,5,46,12,34};
System.out.println(Arrays.toString(intArray));
// Resultado: [2, 5, 46, 12, 34]</code></pre><p>Para um array de referências, temos que ter certeza de que a classe dessas referências sobrescreve o método <code>Object.toString()</code>.</p><p>Por exemplo:</p><pre><code class="language-java">public class Test {
    public static void main(String[] args) {
        Student[] students = {new Student("John"), new Student("Doe")};
        
        System.out.println(Arrays.toString(students));
        // Resultado: [Student{name='John'}, Student{name='Doe'}]
    }
}

class Student {
    private String name;

    public Student(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" + "name='" + name + '\'' + '}';
    }
}</code></pre><p>Esse método não é apropriado para arrays multidimensionais. Ele converte arrays multidimensionais em strings usando o método <code>Object.toString()</code>, o que retorna suas identidades ao invés de seus conteúdos.</p><p>Por exemplo:</p><pre><code class="language-java">// Criando um array multidimensional
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.toString(multiDimensionalArr));
// Resultado: [[I@74a14482, [I@1540e19d]</code></pre><p>Com a ajuda do método <code>Arrays.deepToString()</code>, podemos imprimir arrays multidimensionais.</p><h1 id="3-m-todo-arrays-deeptostring-"><strong>3. Método Arrays.deepToString()</strong></h1><p><code>Arrays.deepToString()</code> retorna uma representação em string dos "conteúdos profundos" do array especificado.</p><p>Se um elemento é um array de tipo primitivo, ele é convertido para string através da invocação da sobrecarga apropriada de <code>Arrays.toString()</code>.</p><p>Aqui está um exemplo de um array multidimensional de tipo primitivo:</p><pre><code class="language-java">// criando o array multidimensional
int[][] multiDimensionalArr = { {2,3}, {5,9} };

System.out.println(Arrays.deepToString(multiDimensionalArr));
// Resultado: [[2, 3], [5, 9]]</code></pre><p>Se um elemento é um array de referências, ele é convertido para string através de uma chamada recursiva do método <code>Arrays.deepToString()</code>.</p><pre><code class="language-java">Teacher[][] teachers = 
{{ new Teacher("John"), new Teacher("David") }, {new Teacher("Mary")} };

System.out.println(Arrays.deepToString(teachers));
// Resultado: 
[[Teacher{name='John'}, Teacher{name='David'}],[Teacher{name='Mary'}]]</code></pre><p>Temos que sobrescrever o método <code>Object.toString()</code> na nossa classe Teacher.</p><p>Se você está curioso sobre como ele faz a recursão, aqui está o <a href="http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/be44bff34df4/src/share/classes/java/util/Arrays.java#l4611">código-fonte</a> para o método <code>Arrays.deepToString()</code>.</p><p><strong>Observação<strong><strong><strong>:</strong></strong></strong></strong> arrays de referência unidimensionais também podem ser impressos usando esse método. Por exemplo:</p><pre><code class="language-java">Integer[] oneDimensionalArr = {1,4,7};

System.out.println(Arrays.deepToString(oneDimensionalArr));
// Resultado: [1, 4, 7]</code></pre><h1 id="4-m-todo-arrays-aslist-"><strong>4. Método Arrays.asList()</strong></h1><p>Esse método retorna uma lista de tamanho fixo criada a partir do array especificado.</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

System.out.println(Arrays.asList(intArray));
// Resultado: [2, 5, 46, 12, 34]</code></pre><p>Mudamos o tipo de int para Integer, porque List é uma coleção que armazena uma lista de objetos. Quando estamos convertendo um array em uma lista, o array deve ser de referências.</p><p>Java chama <code>Arrays.asList(intArray).toString()</code>. Internamente, essa técnica usa o método <code>toString()</code> do tipo dos elementos que estão na lista.</p><p>Temos outro exemplo abaixo, com a nossa classe customizada Teacher:</p><pre><code class="language-java">Teacher[] teacher = { new Teacher("John"), new Teacher("Mary") };

System.out.println(Arrays.asList(teacher));
// Resultado: [Teacher{name='John'}, Teacher{name='Mary'}]</code></pre><p><strong>OBSERVAÇÃO<strong>:</strong></strong> não podemos imprimir arrays multidimensionais usando esse método. Por exemplo:</p><pre><code class="language-java">Teacher[][] teachers = 
{{ new Teacher("John"), new Teacher("David") }, { new Teacher("Mary") }};
        
System.out.println(Arrays.asList(teachers));

// Resultado: [[Lcom.thano.article.printarray.Teacher;@1540e19d, [Lcom.thano.article.printarray.Teacher;@677327b6]</code></pre><h1 id="5-interface-iterator"><strong>5. Interface Iterator</strong></h1><p>Do mesmo modo que com o laço <em>for-each</em>, podemos usar a interface Iterator para percorrer os elementos do array e imprimi-los.</p><p>Um objeto Iterator pode ser criado invocando o método <code>iterator()</code> em uma <em>Collection</em>. Esse objeto será usado para iterar sobre os elementos dessa <em>Collection</em>.</p><p>Aqui está um exemplo de como poderíamos imprimir um array usando a interface Iterator:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

// Criando uma List de Integer
List&lt;Integer&gt; list = Arrays.asList(intArray);

// Criando um Iterator dessa lista de números inteiros
Iterator&lt;Integer&gt; it = list.iterator();

// Se a lista tiver elementos para serem iterados
while(it.hasNext()) {
    System.out.print(it.next());
    // Resultado: 25461234
}</code></pre><h1 id="6-api-stream-do-java"><strong>6. API Stream do Java</strong></h1><p>A API Stream é usada para processar coleções de objetos. Uma stream é uma sequência de objetos. Streams não mudam a estrutura de dados original. Elas apenas fornecem o resultado de cada operação requisitada.</p><p>Com a ajuda da operação de terminal <code>forEach()</code>, podemos iterar sobre cada elemento da stream.</p><p>Por exemplo:</p><pre><code class="language-java">Integer[] intArray = {2,5,46,12,34};

Arrays.stream(intArray).forEach(System.out::print);
// Resultado: 25461234</code></pre><p>Agora, sabemos como imprimir um array em Java.</p><p>Obrigado pela leitura.</p><p>Imagem de <a href="https://unsplash.com/@acharki95?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Aziz Acharki</a>, extraída do <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p><p>Você pode ler outros artigos do autor (em inglês) no <a href="https://medium.com/@mvthanoshan9/object-oriented-programming-principles-in-java-820919dced1a">Medium</a> e no <a href="https://www.freecodecamp.org/news/author/thanoshan/">freeCodeCamp</a>.</p><p><strong>Boa programação para você<strong><strong><strong>!</strong></strong></strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Guia de listagem de arquivos em um diretório em Python - listdir x system("ls") explicados e com exemplos ]]>
                </title>
                <description>
                    <![CDATA[ 🔹 Boas-vindas Se você quer aprender como essas funções atuam internamente e como você pode usar todo o poder delas, este artigo é para você. Começaremos pelos conceitos que são essenciais para se trabalhar com as funções  listdir e system:  * O módulo os, integrado no Python, e ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/guia-de-listagem-de-arquivos-em-um-diretorio-em-python-listdir-x-system-ls-explicados-e-com-exemplos/</link>
                <guid isPermaLink="false">62c362b6a3520206e79d0028</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Marcelo Gimenes de Oliveira ]]>
                </dc:creator>
                <pubDate>Sun, 02 Oct 2022 21:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/listdir-vs-system-v2.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/python-list-files-in-a-directory-guide-listdir-vs-system-ls-explained-with-examples/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Python List Files in a Directory Guide - listdir VS system("ls") Explained with Examples</a>
      </p><h2 id="-boas-vindas"><strong>🔹 Boas-vindas</strong></h2><p>Se você quer aprender como essas funções atuam internamente e como você pode usar todo o poder delas, este artigo é para você.</p><p>Começaremos pelos conceitos que são essenciais para se trabalhar com as funções <code>listdir</code> e <code>system</code>:</p><ul><li>O módulo <code>os</code>, integrado no Python, e como importá-lo.</li><li>Os conceitos de "diretório" e "diretório atual".</li><li>Como obter e mudar o seu diretório atual.</li><li>A diferença entre um caminho absoluto e um caminho relativo.</li></ul><p>Depois, aprofundaremos nas funções propriamente ditas:</p><ul><li>Como trabalhar com a função <code>listdir</code> e quando usá-la.</li><li>Como trabalhar com a função <code>system("ls")</code> e quando usá-la.</li><li>Exemplos de ambas e de como elas funcionam internamente.</li></ul><p>Vamos começar! ⭐</p><h2 id="-o-m-dulo-os">🔸 O módulo OS</h2><p>As duas funções que discutiremos, <code>listdir()</code> e <code>system()</code>, fazem parte do módulo <code>os</code>. Esse módulo inclui funções que são usadas para interagir com o sistema operacional, realizando ações como:</p><ul><li>Criar um diretório</li><li>Renomear um diretório existente.</li><li>Remover um diretório.</li><li>Mostrar o caminho para o seu diretório atual.</li><li>E muito mais!</li></ul><p><strong><strong>💡 </strong>Dicas<strong>:</strong></strong></p><ul><li>Um <strong>diretório<strong> </strong></strong>é o que comumente chamamos de "pasta", onde guardamos arquivos e/ou outros diretórios, criando uma hierarquia de "diretórios dentro de diretórios" (também chamados de subdiretórios). Um exemplo de diretório é a pasta "Documentos".</li><li>Um <strong>módulo<strong> </strong></strong>é um arquivo que contém códigos em Python relacionados.</li></ul><h3 id="como-importar-o-m-dulo-os"><strong>Como importar o módulo OS</strong></h3><p>Para usar o módulo <code>os</code> no seu script, você precisa "importá-lo". Importar um módulo significa ganhar acesso a todas as funções e variáveis que estão armazenadas no módulo. Importamos um módulo quando queremos usar o seu código no nosso script.</p><p>Para importar o módulo <code>os</code>, você simplesmente precisa incluir esta linha no início do seu script Python ou executá-la no seu shell interativo:</p><pre><code class="language-python">import os</code></pre><p>Isso dará acesso a todas as funções definidas no módulo <code>os</code>.</p><p><strong><strong>💡 </strong>Dica<strong>:</strong></strong> o módulo <code>os</code> foi instalado quando você instalou o Python 3. Então, você poderá utilizá-lo imediatamente.</p><p>Para poder utilizar as funções do módulo <code>os</code>, você precisará adicionar o prefixo <code>os.</code> antes do nome da função que deseja chamar, desta maneira:</p><pre><code class="language-python">os.&lt;função&gt;(&lt;parâmetros&gt;)</code></pre><p>Por exemplo:</p><pre><code>os.mkdir("Nova Pasta")</code></pre><h3 id="como-importar-fun-es-individualmente"><strong>Como importar funções individualmente</strong></h3><p>Se você trabalhará apenas com uma ou duas funções do módulo, pode importá-las individualmente usando a seguinte sintaxe:</p><pre><code>from &lt;módulo&gt; import &lt;função1&gt;, &lt;função2&gt;, ...</code></pre><p>Por exemplo:</p><pre><code class="language-python">from os import listdir, system</code></pre><p>Nesse caso, você pode chamar essas funções no seu script normalmente, <strong>sem</strong> <strong>adicionar</strong> o prefixo <code>os.</code>, desta maneira:</p><pre><code class="language-python">&lt;função&gt;(&lt;parâmetros&gt;)</code></pre><p>Por exemplo:</p><pre><code>mkdir("Nova Pasta")</code></pre><h2 id="-diret-rio-atual"><strong>🔹 Diretório atual</strong></h2><p>Agora, vamos ver um conceito muito importante que você precisa saber antes de começar a trabalhar com <code>listdir</code> e <code>system</code>. Seu diretório atual, como o nome diz, é o diretório (pasta) em que você está trabalhando no momento.</p><p>Você pode verificar o seu diretório atual com essa função do módulo <code>os</code>:</p><pre><code class="language-python">os.getcwd()</code></pre><p>Isso mostrará o caminho do seu diretório atual.</p><p>💡 <strong>Dica<strong>:</strong></strong> <code>cwd</code> significa "current working directory", que, traduzindo para o português, significa "diretório atual".</p><h3 id="a-partir-do-shell-interativo"><strong>A partir do shell interativo</strong></h3><p>Se eu executo o comando em um shell interativo (Windows), eu vejo isto:</p><pre><code class="language-python">&gt;&gt;&gt; os.getcwd()
'C:\\Users\\estef\\AppData\\Local\\Programs\\Python\\Python38-32'</code></pre><p>Esse é o caminho completo para o meu diretório atual:</p><pre><code class="language-python">'C:\\Users\\estef\\AppData\\Local\\Programs\\Python\\Python38-32'</code></pre><h3 id="a-partir-de-um-script"><strong>A partir de um script</strong></h3><p>Se eu executo o comando a partir de um script, como este:</p><pre><code class="language-python">import os
print(os.getcwd())</code></pre><p>Eu vejo:</p><pre><code class="language-python">C:\Users\estef\Documents\freeCodeCamp\freeCodeCamp News\listdir vs system</code></pre><p>O caminho completo para o script (a sua localização no sistema, na hierarquia de diretórios).</p><p>💡 <strong>Dica<strong>:</strong></strong> se eu executo um script (um arquivo em Python), o diretório atual nem sempre é o diretório onde o script está localizado, mas é o diretório de onde o script foi executado.</p><h3 id="como-mudar-o-seu-diret-rio-atual"><strong>Como mudar o seu diretório atual</strong></h3><p>Você pode mudar o seu diretório atual com este comando do módulo <code>os</code>:</p><pre><code class="language-python">os.chdir(&lt;caminho&gt;)</code></pre><p>Você precisará especificar o caminho para o novo diretório atual, passando como argumento uma string. Essa string pode ser tanto um caminho absoluto como um caminho relativo.</p><p>💡 <strong>Dica<strong>:</strong> </strong>um <strong>caminho absoluto</strong> especifica toda a sequência de diretórios que você precisa passar para chegar em um diretório qualquer. Esse caminho começa no diretório raiz do seu sistema.</p><p>Por exemplo:</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; os.chdir(r"C:\Users\estef\Documents\FreeCodeCamp\freeCodeCamp News\9 - listdir vs system")

# Verificando o diretório atual:
&gt;&gt;&gt; os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system'</code></pre><p>Observe que adicionei um <code>r</code> antes do caminho absoluto para converter a string em uma raw string. Se você adicionar uma <code>\</code> na string e não adicionar o <code>r</code>, você receberá um erro, porque o símbolo <code>\</code> será tratado como um caractere especial.</p><p>Como alternativa, você pode substituir as contrabarras <code>\</code> por barras <code>/</code> no caminho:</p><pre><code class="language-python">&gt;&gt;&gt; os.chdir("C:/Users/estef/Documents/FreeCodeCamp/freeCodeCamp News/9 - listdir vs system")

# Verificando o diretório atual:
&gt;&gt;&gt; os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system'</code></pre><ul><li>Um <strong>caminho relativo</strong> especifica o caminho que você deseja seguir para encontrar o diretório de destino, mas agora o caminho começa do seu <strong>diretório atual</strong>. Ele é mais curto e simples que o caminho absoluto.</li></ul><p>Por exemplo, se o seu diretório atual contém um subdiretório (pasta) <code>Directory 1</code>, você pode mudar para esse diretório usando um caminho relativo (imagine como uma pasta dentro de outra pasta, e estamos indo cada vez mais fundo na hierarquia), deste modo:</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; os.chdir(".\Directory 1")

# Verificando o diretório atual
&gt;&gt;&gt; os.getcwd()
'C:\\Users\\estef\\Documents\\FreeCodeCamp\\freeCodeCamp News\\9 - listdir vs system\\Directory 1'</code></pre><p>💡 <strong>Dica<strong>:</strong></strong> o ponto (<code>.</code>) no começo do caminho relativo <code>.\Directory 1</code> representa o diretório atual. Dois pontos ( <code>..</code>) é usado para subir na hierarquia, para o diretório "pai".</p><p>Agora que você tem todo esse conhecimento, vamos entender de fato como <code>listdir</code> e <code>system</code> funcionam. Então, vamos ver essas funções em mais detalhes.</p><h2 id="-listdir"><strong>🔸 Listdir</strong></h2><p>Começaremos com a função <code>listdir</code>. Vamos revelar seus mistérios.</p><h3 id="prop-sito-e-retorno"><strong>Propósito e retorno</strong></h3><p>De acordo com a <a href="https://docs.python.org/pt-br/3/library/os.html#os.listdir">documentação do Python</a>, o propósito dessa função é:</p><blockquote>Retornar uma lista contendo os nomes das entradas no diretório fornecido pelo <em>caminho.</em></blockquote><p>Basicamente, essa função retorna uma lista com os nomes de todos os arquivos e diretório que podem ser encontrados dentro de um diretório que você especifica quando chama a função.</p><p>💡 <strong>Dica<strong>:</strong></strong> a lista não terá uma ordem específica, mesmo que você ordene normalmente os elementos alfabeticamente.</p><h3 id="sintaxe-e-par-metro"><strong>Sintaxe e parâmetro</strong></h3><p>Para chamar <code>listdir</code>, precisamos usar esta sintaxe:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-9.png" class="kg-image" alt="image-9" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-9.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-9.png 990w" sizes="(min-width: 720px) 720px" width="990" height="115" loading="lazy"><figcaption>Aqui, "path" significa "caminho"</figcaption></figure><p>O parâmetro <code>caminho</code> é precisamente o caminho absoluto ou relativo para o diretório que você quer visualizar. No Python 3.2 ou superior, esse parâmetro é opcional. Por padrão, o caminho mostrará o seu diretório atual se você não passar um argumento.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-12.png" class="kg-image" alt="image-12" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-12.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-12.png 813w" sizes="(min-width: 720px) 720px" width="813" height="265" loading="lazy"><figcaption>Aqui, "Current Working Directory" significa "diretório atual"</figcaption></figure><p>Lembre-se de que você precisa importar o módulo <code>os</code> antes de chamar essa função.</p><p>💡 <strong>Dica<strong>:</strong></strong> se você usa essa declaração de importação <code>from os import listdir</code> para importar a função individualmente, poderá omitir o prefixo <code>os.</code>, deste modo:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-10.png" class="kg-image" alt="image-10" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-10.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-10.png 867w" sizes="(min-width: 720px) 720px" width="867" height="96" loading="lazy"><figcaption>Aqui, "path" significa "caminho"</figcaption></figure><h3 id="casos-de-uso-e-vantagens"><strong>Casos de uso e vantagens</strong></h3><p>A função <code>listdir</code> é muito útil, pois ela funciona em qualquer sistema operacional no qual o Python rode. Então, se o Python estiver instalado no seu dispositivo, essa função funcionará corretamente.</p><p>Agora, vamos falar um pouco sobre o retorno dessa função. Já que ela retorna uma lista, podemos armazenar essa lista em uma variável e trabalhar com ela no nosso programa.</p><p>Por exemplo, podemos querer fazer algo com todos os arquivos de um diretório, como converter as imagens para preto e branco ou alterar o seu conteúdo. Poderíamos fazer isso com um laço <em>for</em>, deste modo:</p><pre><code class="language-python">images = os.listdir(&lt;caminho&gt;)

for image in images:
	# Fazer algo com a imagem
</code></pre><p>Certamente, você precisaria definir o que acontecerá dentro do laço, mas esse é apenas um exemplo do que você poderia fazer com essa função.</p><p>Incrível, não é?</p><p>No entanto, ter arquivos e diretórios na mesma lista pode ser um pouco problemático se você quer trabalhar com um laço <em>for</em>, certo? Precisaríamos adicionar uma validação 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?</p><p>Vamos ver! ✨</p><h3 id="incluir-apenas-arquivos">Incluir apenas arquivos</h3><p>Se você quer "filtrar" a lista retornada por <code>os.listdir()</code> para incluir apenas <strong>arquivos<strong> </strong></strong>(sem diretórios), você pode usar essa linha de código:</p><pre><code class="language-python">list(filter(os.path.isfile, os.listdir(&lt;caminho&gt;)))</code></pre><p>💡 <strong>Dica<strong>:</strong></strong> você pode personalizar o argumento <code>&lt;caminho&gt;</code> ou omiti-lo para usar o seu diretório atual.</p><p>Vamos ver um exemplo usando o meu diretório atual (estou usando o Windows):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-23.png" class="kg-image" alt="image-23" width="283" height="183" loading="lazy"></figure><p>Meu diretório (pasta) tem:</p><ul><li>Dois subdiretórios (pastas dentro da pasta principal)</li><li>Um arquivo PowerPoint</li><li>Uma imagem (arquivo .png)</li><li>Um script em Python</li></ul><p>Se eu chamar a função <code>listdir</code> do arquivo <code>script.py</code> e exibir a lista que foi retornada:</p><pre><code class="language-python">print(os.listdir())</code></pre><p>Esta é a saída:</p><pre><code class="language-python">['Diagrams.ppt', 'Directory 1', 'Directory 2', 'listdir vs system.png', 'script.py']</code></pre><p>Você pode ver que todos os arquivos e diretórios do meu diretório atual foram incluídos.</p><p>Para filtrar a lista para conter apenas arquivos, nós podemos usar esta declaração:</p><pre><code class="language-python">print(list(filter(os.path.isfile, os.listdir())))</code></pre><p>Agora, a saída é esta:</p><pre><code class="language-python">['Diagrams.ppt', 'listdir vs system.png', 'script.py']</code></pre><p>Observe como os diretórios foram "filtrados", exatamente como queríamos.</p><h3 id="incluir-apenas-diret-rios"><strong>Incluir apenas diretórios</strong></h3><p>Do mesmo modo, se você quer "filtrar" a lista para incluir apenas <strong>diretórios</strong>, você pode usar esta linha de código:</p><pre><code class="language-python">list(filter(os.path.isdir, os.listdir(&lt;caminho&gt;)))</code></pre><p>Agora, a saída é:</p><pre><code>['Directory 1', 'Directory 2']</code></pre><p>Exatamente como queríamos. Porém, como essa declaração funciona internamente? Vamos ver.</p><h3 id="como-filter-funciona-internamente"><strong>Como <code>filter()</code> funciona internamente</strong></h3><p>A função <code>filter</code> é chamada usando a seguinte sintaxe:</p><pre><code>filter(&lt;função&gt;, &lt;lista&gt;)</code></pre><p>Ela basicamente "filtra" os elementos do segundo argumento (a lista) baseado no valor booleano retornado quando chamada a função passada como primeiro argumento (<code>os.path.isfile()</code> ou <code>os.path.isdir()</code> nos seus respectivos comandos):</p><pre><code class="language-python">print(list(filter(os.path.isfile, os.listdir())))</code></pre><pre><code class="language-python">list(filter(os.path.isdir, os.listdir()))</code></pre><p>Estas duas funções:</p><pre><code>os.path.isfile(&lt;caminho&gt;)

os.path.isdir(&lt;caminho&gt;)</code></pre><p>retornam <code>True</code> se o argumento é um arquivo ou um diretório, respectivamente.</p><p>Baseado nesses valores booleanos, os elementos da lista serão incluídos (ou não) na lista "filtrada". Os elementos da lista retornada pela função <code>os.listdir()</code> são passados um por um para essas funções para verificar se eles são arquivos (ou diretórios, respectivamente).</p><p>Por exemplo, se você tem esta linha de código:</p><pre><code class="language-python">filter(os.path.isfile, os.listdir())))</code></pre><p>e se <code>os.listdir()</code> retorna esta lista:</p><pre><code class="language-python">['Diagrams.ppt', 'Directory 1', 'Directory 2', 'script.py']</code></pre><p>O primeiro elemento da lista (<code>'Diagrams.ppt'</code>) é passado como argumento para <code>os.path.isfile()</code> para verificar se ele é um arquivo:</p><pre><code class="language-python">os.path.isfile('Diagrams.ppt') # True</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-30.png" class="kg-image" alt="image-30" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-30.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-30.png 946w" sizes="(min-width: 720px) 720px" width="946" height="494" loading="lazy"></figure><p>A chamada dessa função retorna <code>True</code>. Então, é um arquivo e é incluído na lista.</p><p>No entanto, se o elemento é um diretório:</p><pre><code class="language-python">os.path.isfile('Directory 1') # False</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-31.png" class="kg-image" alt="image-31" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-31.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-31.png 939w" sizes="(min-width: 720px) 720px" width="939" height="473" loading="lazy"></figure><p>A chamada da função retorna <code>False</code>. Então, o elemento não é incluído na lista. Esse processo continua para cada elemento na lista até que a nova lista contenha apenas nomes de arquivos.</p><p>Assim, já que <code>filter()</code> retorna um <code>iterable</code>, criamos uma lista a partir desse <code>iterable</code> usando <code>list()</code>:</p><pre><code class="language-python">list(filter(os.path.isfile, os.listdir()))</code></pre><p>Logo, imprimimos essa lista, já que estamos trabalhando com um arquivo em Python (script):</p><pre><code class="language-python">print(list(filter(os.path.isfile, os.listdir())))</code></pre><p>💡 <strong>Dica<strong>:</strong></strong> você pode identificar visualmente se um elemento da lista representa um arquivo ou um diretório vendo se ele tem uma extensão (tipo) após seu nome. Por exemplo: <code>Diagrams.ppt</code> tem a extensão <code>.ppt</code>, o que mostra que ele é um arquivo do PowerPoint, mas um diretório não possui um extensão, como <code>'Directory 1'</code>.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-32--1-.png" class="kg-image" alt="image-32--1-" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-32--1-.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-32--1-.png 927w" sizes="(min-width: 720px) 720px" width="927" height="206" loading="lazy"></figure><h2 id="-system-ls-">🔹 System("ls")</h2><p>Agora que você sabe como trabalhar com o <code>listdir</code>, vamos ver como a função <code>system()</code> funciona internamente e como você pode usá-la.</p><h3 id="finalidade"><strong>Finalidade</strong></h3><p>De acordo com a <a href="https://docs.python.org/pt-br/3/library/os.html#os.system">documentação do Python</a>, o propósito da função <code>system()</code> é:</p><blockquote>Executar o comando (uma string) em um subshell</blockquote><p>Basicamente, essa função pega um comando (como uma string) e o executa.</p><p>Neste caso, o comando que estamos passando é o <code>'ls'</code> , um comando Unix usado no Linux para exibir o conteúdo de um diretório no stdout.</p><p>Diferente de <code>listdir</code>, a função <code>system()</code> <strong>não retornará uma lista<strong> </strong></strong>se você passar o comando <code>'ls'</code>, ela apenas <strong>exibirá</strong> a lista de arquivos e diretórios no stdout. Por isso, você deve usá-la apenas se deseja visualizar a lista sem trabalhar com ela no seu programa.</p><h3 id="sintaxe-e-par-metros"><strong>Sintaxe e parâmetros</strong></h3><p>Para chamar essa função, você precisará usar essa sintaxe:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-15.png" class="kg-image" alt="image-15" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/09/image-15.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/09/image-15.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-15.png 1136w" sizes="(min-width: 720px) 720px" width="1136" height="128" loading="lazy"><figcaption>Aqui, "command" significa "comando"</figcaption></figure><p>O único argumento é o <code>comando</code> que você deseja executar, como uma string (envolta por aspas ou apóstrofos).</p><p>Particularmente, o comando <code>ls</code> permite que você veja o conteúdo do seu diretório atual.</p><p>Por exemplo, se esse é o meu diretório atual (três arquivos em Python e um subdiretório):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/09/image-17.png" class="kg-image" alt="image-17" width="278" height="195" loading="lazy"></figure><p>Chamamos a função <code>system()</code>, deste modo:</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; os.system("ls")</code></pre><p>Este é o resultado:</p><pre><code class="language-python">'Directory 1'  'file 1.py'  'file 2.py'   main.py
0</code></pre><p>Podemos ver o stdout no console (a lista de arquivos e diretórios):</p><pre><code class="language-python">'Directory 1'  'file 1.py'  'file 2.py'   main.py</code></pre><p>e o valor retornado:</p><pre><code class="language-python">0</code></pre><p>💡 <strong>Observação<strong>:</strong></strong> para esses exemplos da função <code>system()</code>, estamos trabalhando com uma ferramenta de linha de comando on-line, chamada Repl.it, já que meu computador tem o Windows instalado e o comando <code>ls</code> não é reconhecido pelo prompt de comando padrão.</p><h3 id="limita-es"><strong>Limitações</strong></h3><p>Uma das principais limitações dessa função é o fato de que o comando passado como argumento deve ser reconhecido pelo sistema operacional ou pelo ambiente em que você está trabalhando.</p><p>Por exemplo, o comando <code>ls</code> não será reconhecido no Windows no prompt de comando padrão. Você verá esse erro caso tente executá-lo:</p><blockquote>'ls' não é reconhecido como um comando interno ou externo, um programa operável ou um arquivo em lotes.</blockquote><p>Um comando similar no Windows seria o comando <code>'dir'</code>:</p><pre><code class="language-python">os.system('dir')</code></pre><p><strong><strong>💡 </strong>Dica<strong>:</strong></strong> existem alternativas para rodar o comando <code>ls</code> no Windows, como usar um terminal que reconhece comandos do Unix, mas, por padrão, o Windows não reconhece o comando <code>'ls'</code>.</p><h3 id="valor-de-retorno"><strong>Valor de retorno</strong></h3><p>De acordo com a <a href="https://docs.python.org/pt-br/3/library/os.html#os.system">documentação do Python</a>:</p><blockquote>No Unix, o valor de retorno é o status de saída do processo codificado no formato especificado para <a href="https://docs.python.org/pt-br/3/library/os.html#os.wait"><code>wait()</code></a>.</blockquote><p>e...</p><blockquote>No Windows, o valor de retorno é aquele retornado pelo shell do sistema após a execução do comando.</blockquote><p>💡 <strong>Dica<strong>:</strong></strong> observe que essa função não retorna uma lista. Ela apenas mostra a lista no stdout. Então, você não pode armazená-la em uma variável, como fizemos com o <code>listdir</code>.</p><h3 id="varia-es-do-comando-ls"><strong>Variações do comando <code>ls</code></strong></h3><p>Uma das principais funções do <code>os.system('ls')</code> é ter várias opções úteis e interessantes para personalizar a apresentação da saída. Vejamos algumas delas.</p><p><strong>Opção<strong> 1:</strong></strong> podemos mostrar mais informações sobre os arquivos e diretórios, como seus tamanhos, localização, data e hora da última alteração usando o comando <code>ls -l</code>.</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; os.system('ls -l')
total 12
drwxr-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.py
0</code></pre><p><strong>Opção<strong> 2: </strong></strong>para reconhecer visualmente diretórios mais rapidamente, podemos usar <code>ls -F</code>, que adiciona uma barra <code>/</code> no final dos seus nomes (veja <code>Directory 1/</code> abaixo).</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; os.system('ls -F')
'Directory 1'/  'file 1.py'  'file 2.py'   main.py
0</code></pre><p><strong>Opção<strong> 3:</strong></strong> para ordenar os arquivos pelo tamanho, podemos usar o comando <code>ls -lS</code>.</p><pre><code class="language-python">&gt;&gt;&gt; import os
&gt;&gt;&gt; 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.py
drwxr-xr-x 1 runner runner  0 Apr  3 18:23 'Directory 1'
0</code></pre><p>Existem muitas outras opções para personalização que podem ajudar atingir um objetivo específico. <a href="https://pt.wikipedia.org/wiki/Ls">Aqui, você pode encontrar mais informações</a> sobre o comando <code>ls</code> e sobre como utilizar todo o seu poder.</p><h2 id="-resumo-de-listdir-x-system-ls-"><strong>🔸 Resumo de listdir x system("ls")</strong></h2><ul><li><strong>Propósito<strong>:</strong></strong> <code>listdir</code> retorna a lista de nomes de arquivos e diretórios no caminho especificado (por padrão, o diretório atual) enquanto <code>system("ls")</code> apenas os mostra no stdout.</li><li><strong>Sistema operacional<strong>:</strong></strong> <code>listdir</code> pode ser utilizado independentemente do sistema operacional em que você está trabalhando. Em contrapartida, <code>system('ls')</code> tem que ser executado em um sistema operacional ou ambiente que reconheça o comando <code>'ls'</code>.</li><li><strong>Personalização<strong>:</strong></strong> você pode filtrar a lista retornada pelo <code>listdir</code> se precisar remover arquivos e diretórios usando a função <code>filter()</code>. Também é possível passar opções adicionais para personalizar a saída de <code>system('ls')</code>.</li></ul><p><strong>Eu realmente espero que você tenha gostado deste artigo e o tenha achado útil<strong>. </strong></strong>Agora, você pode trabalhar com essas funções nos seus projetos em Python. <a href="https://www.udemy.com/user/estefania-cn/">Confira os cursos on-line da autora</a> e siga-a no <a href="https://twitter.com/EstefaniaCassN">Twitter</a>. ⭐️</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
