O método readlines()
de um objeto de arquivo retorna uma lista do Python. Ele não grava automaticamente no stdout o conteúdo do arquivo: Python é uma linguagem de script, mas não uma linguagem shell script!
Você deve substituir:
f.readlines()
com:
sys.stdout.write(f.read())
Observe que estou usando read()
em vez de readlines()
. Como eu disse, readlines()
retorna uma lista, mas aqui queremos imprimir uma string - e read()
faz o que queremos: lê o arquivo inteiro e retorna uma string. Não é ideal quando o arquivo é enorme (porque ele usa uma quantidade enorme de memória), mas funciona.
Vale a pena notar que o seu código é falho. Você disse: seguir código é ler todos os arquivos no diretório de download . Seu código, na verdade, tentará ler os arquivos e diretórios terminados em .html
. Se o seu código encontrar um diretório que termine com .html
, ele falhará em voz alta.
Por fim, você deve preferir usar a instrução with
ao abrir arquivos, especialmente quando estiver abrindo muitos arquivos. A instrução with
garantirá que o arquivo seja fechado assim que você terminar de trabalhar com ele, mesmo que ocorra um erro.
Portanto, seu código deve ficar assim:
import sys
import glob
import errno
path = '/home/mypc/download/*.html'
files = glob.glob(path)
for name in files: # 'file' is a builtin type, 'name' is a less-ambiguous variable name.
try:
with open(name) as f: # No need to specify 'r': this is the default.
sys.stdout.write(f.read())
except IOError as exc:
if exc.errno != errno.EISDIR: # Do not fail if a directory is found, just ignore it.
raise # Propagate other kinds of IOError.