Python: drukowanie pliku na standardowe wyjście


89

Szukałem i mogę znaleźć tylko pytania na odwrót: zapisywanie stdin do pliku :)

Czy istnieje szybki i łatwy sposób zrzucenia zawartości pliku na standardowe wyjście?

Odpowiedzi:


122

Pewnie. Zakładając, że masz ciąg o nazwie pliku o nazwie fname, poniższe rozwiązuje problem.

with open(fname, 'r') as fin:
    print(fin.read())

8
Zauważ, że doda to dodatkowy znak nowej linii na końcu wyniku.
ŚR

13
Zarówno dla Python 3 zgodności i uniknięcie nowej linii spływu, w ostatnim wierszu należy prawdopodobnie przeczytać: print(fin.read(), end=""). Aby wykorzystać to rozwiązanie w Pythonie 2, from __future__ import print_functionpotrzebne będzie prefiksowanie . Oczywiście aplikacje Python 2 i tak powinny zawsze korzystać z print()funkcji Python 3 - więc nie jest to dużym obciążeniem.
Cecil Curry

42

Jeśli jest to duży plik i nie chcesz zużywać dużej ilości pamięci, co może się zdarzyć w przypadku rozwiązania Bena, dodatkowy kod w

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

też działa.


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

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

Aby odczytać zawartość pliku, wywołaj f.read (size), który odczytuje pewną ilość danych i zwraca je jako ciąg. rozmiar to opcjonalny argument liczbowy. Gdy rozmiar jest pominięty lub ujemny, cała zawartość pliku zostanie odczytana i zwrócona; to twój problem, jeśli plik jest dwa razy większy niż pamięć twojego komputera. W przeciwnym razie odczytywane i zwracane są maksymalnie bajty rozmiaru. Jeśli osiągnięto koniec pliku, f.read () zwróci pusty ciąg ("").




0

Możesz tego spróbować.

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

To da ci plik wyjściowy.


0

Jeśli musisz to zrobić z pathlibmodułem, możesz użyć pathlib.Path.open()do otwarcia pliku i wydrukowania tekstu z read():

from pathlib import Path

fpath = Path("somefile.txt")

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

Lub po prostu zadzwoń pathlib.Path.read_text():

from pathlib import Path

fpath = Path("somefile.txt")

print(fpath.read_text())

0

Aby poprawić odpowiedź @ bgporter, w Pythonie-3 prawdopodobnie będziesz chciał operować na bajtach zamiast niepotrzebnie konwertować rzeczy do utf-8:

>>> import shutil
>>> import sys
>>> with open("test.txt", "rb") as f:
...    shutil.copyfileobj(f, sys.stdout.buffer)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.