abre uma pasta com vários arquivos em python [closed]

0

Como posso abrir uma pasta com vários arquivos nela? Eu testei esses códigos, mas ele retorna uma resposta estranha.

import os
for ZebRa in os.listdir(os.getcwd()):
    num_words = 0
    for line in ZebRa:
        words = line.split ()
        num_words += len (words)
print ("The number of words:", num_words)

Apenas retorna 9. Mas deve contar o número de palavras em 7 arquivos, 70 arquivos de texto.

    
por LJS 15.02.2015 / 17:49

2 respostas

2

Você precisa do Python? Você pode contar palavras usando a ferramenta de linha de comando wc :

wc -w *

wc (abreviação de contagem de palavras) é uma ferramenta útil para contar palavras, caracteres ou linhas em arquivos de texto. Abra um terminal, navegue até a pasta que contém os arquivos que você deseja contar palavras e execute o comando acima. O primeiro parâmetro -w significa contar palavras (em oposição a linhas ou caracteres). Você pode passar nomes de arquivo para contar em arquivos específicos ou usar curingas, como * , para contar palavras em todos os arquivos da pasta atual.

Caso seus arquivos estejam localizados em subpastas, o mais fácil seria usar find para obter uma lista dos arquivos:

find . -type f -exec wc -w {} +
    
por lumbric 15.02.2015 / 18:01
2

Como mencionado, seu código não está muito claro para mim. Um dos erros que você comete é colocar a linha num_words = 0 dentro do loop, o que significa que, em cada subpasta, você começa a contar a partir de 0.

Se você quiser usar python, o que funcionaria de qualquer maneira é usar os.walk , que contaria as palavras em todos os arquivos em um diretório e em seus subdiretórios, independentemente de como eles fossem organizados:

#!/usr/bin/env python3
import os
dr = "/path/to/ZebRa"; n_words = 0
for root, dirs, files in os.walk(dr):
    for file in files:
        with open(root+"/"+file) as r:
            n_words += len(r.read().split())
print(n_words)

Nota (s)

  1. Lembre-se de que, se você (já) editou os arquivos de texto com, por exemplo, gedit , gedit provavelmente fez arquivos de backup (ocultos), denominados filename~ . Esses arquivos também serão lidos, a menos que você diga ao script que não, o que polui a contagem de palavras.
  2. Lembre-se também de que o script será quebrado se for executado em arquivos ilegíveis, novamente, a menos que você diga que ele será aprovado se não puder ler um arquivo.

A edição de ambos os problemas no script faria:

#!/usr/bin/env python3
import os
dr = "/path/to/ZebRa"; n_words = 0
for root, dirs, files in os.walk(dr):
    for f in [f for f in files if not f.startswith(".") and not f.endswith("~")]:
        try: 
            with open(root+"/"+f) as r:
                n_words += len(r.read().split())
        except UnicodeDecodeError:
            pass
print(n_words)
    
por Jacob Vlijm 15.02.2015 / 18:43