Python: imprimindo um arquivo para stdout

89

Eu pesquisei e só consigo encontrar perguntas sobre o contrário: escrever stdin em um arquivo :)

Existe uma maneira rápida e fácil de despejar o conteúdo de um arquivo no stdout?

meteoritepanama
fonte

Respostas:

122

Certo. Supondo que você tenha uma string com o nome do arquivo chamado fname, o seguinte resolve.

with open(fname, 'r') as fin:
    print(fin.read())
David Alber
fonte
8
Observe que isso adicionará uma nova linha extra no final da saída.
DA
13
Para compatibilidade com Python 3 e evitando o final de linha, a última linha provavelmente deve ler: print(fin.read(), end=""). Para aproveitar essa solução no Python 2, um prefixo from __future__ import print_functionserá necessário. Claro, os aplicativos Python 2 devem sempre usar a print()função Python 3 de qualquer maneira - então isso não é um fardo.
Cecil Curry
42

Se for um arquivo grande e você não quiser consumir uma tonelada de memória, como pode acontecer com a solução de Ben, o código extra em

>>> import shutil
>>> import sys
>>> with open("test.txt", "r") as f:
...    shutil.copyfileobj(f, sys.stdout)

também funciona.

bgporter
fonte
18
f = open('file.txt', 'r')
print f.read()
f.close()

De http://docs.python.org/tutorial/inputoutput.html

Para ler o conteúdo de um arquivo, chame f.read (size), que lê alguma quantidade de dados e os retorna como uma string. size é um argumento numérico opcional. Quando o tamanho é omitido ou negativo, todo o conteúdo do arquivo será lido e retornado; o problema é seu se o arquivo for duas vezes maior que a memória da máquina. Caso contrário, no máximo os bytes de tamanho são lidos e retornados. Se o final do arquivo for alcançado, f.read () retornará uma string vazia ("").

Ben
fonte
7

Minha versão abreviada em Python3

print(open('file.txt').read())
mlanzero
fonte
2
Nota: isso não fecha o arquivo.
Ben Caine
3

você também pode tentar isso

print ''.join(file('example.txt'))

Ninja420
fonte
0

Você pode tentar isso.

txt = <file_path>
txt_opn = open(txt)
print txt_opn.read()

Isso fornecerá saída de arquivo.

Shoaib
fonte
0

Se precisar fazer isso com o pathlibmódulo, você pode usar pathlib.Path.open()para abrir o arquivo e imprimir o texto de read():

from pathlib import Path

fpath = Path("somefile.txt")

with fpath.open() as f:
    print(f.read())

Ou simplesmente ligue pathlib.Path.read_text():

from pathlib import Path

fpath = Path("somefile.txt")

print(fpath.read_text())
RoadRunner
fonte
0

Para melhorar a resposta de @bgporter, com Python-3 você provavelmente desejará operar em bytes em vez de converter coisas desnecessariamente para utf-8:

>>> import shutil
>>> import sys
>>> with open("test.txt", "rb") as f:
...    shutil.copyfileobj(f, sys.stdout.buffer)
mricon
fonte