Python: stdout'a dosya yazdırma


89

Aradım ve yalnızca tam tersi hakkında sorular bulabiliyorum: stdin'i bir dosyaya yazmak :)

Bir dosyanın içeriğini standart çıktıya dökmenin hızlı ve kolay bir yolu var mı?

Yanıtlar:


122

Elbette. Dosyanın adı çağrılan bir dizeniz olduğunu varsayarsak fname, aşağıdaki hile yapar.

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

8
Bunun çıktının sonuna fazladan bir satırsonu ekleyeceğini unutmayın.
DA

13
Python 3 uyumluluk ikisi için ve sondaki yeni satır kaçınarak, son satırı muhtemelen okumalısınız: print(fin.read(), end=""). Python 2 altında bu çözümü kullanmak için bir ön ek from __future__ import print_functiongerekecek. Tabii ki, Python 2 uygulamaları zaten her zaman Python 3 print()işlevini kullanmalıdır - bu yüzden bu bir yük değil.
Cecil Curry

42

Büyük bir dosyaysa ve Ben'in çözümünde olabileceği gibi bir ton bellek tüketmek istemiyorsanız,

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

ayrıca çalışır.


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

Gönderen http://docs.python.org/tutorial/inputoutput.html

Bir dosyanın içeriğini okumak için, bir miktar veriyi okuyan ve onu bir dizge olarak döndüren f.read (size) çağırın. boyut, isteğe bağlı bir sayısal bağımsız değişkendir. Boyut ihmal edildiğinde veya negatif olduğunda, dosyanın tüm içeriği okunur ve döndürülür; dosya makinenizin belleğinin iki katı büyüklüğünde ise bu sizin sorununuzdur. Aksi takdirde, en çok boyut baytları okunur ve döndürülür. Dosyanın sonuna ulaşılmışsa, f.read () boş bir dizge ("") döndürür.


7

Python3'teki kısaltılmış sürümüm

print(open('file.txt').read())

2
Not: bu, dosyayı kapatmaz.
Ben Caine

3

bunu da deneyebilirsin

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


0

Bunu deneyebilirsin.

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

Bu size dosya çıktısı verecektir.


0

Bunu pathlibmodül ile yapmanız gerekiyorsa pathlib.Path.open(), dosyayı açmak ve metni şuradan yazdırmak için kullanabilirsiniz read():

from pathlib import Path

fpath = Path("somefile.txt")

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

Veya sadece arayın pathlib.Path.read_text():

from pathlib import Path

fpath = Path("somefile.txt")

print(fpath.read_text())

0

@ Bgporter'ın cevabını geliştirmek için, Python-3 ile işleri gereksiz yere utf-8'e dönüştürmek yerine muhtemelen baytlar üzerinde çalışmak isteyeceksiniz:

>>> import shutil
>>> import sys
>>> with open("test.txt", "rb") as f:
...    shutil.copyfileobj(f, sys.stdout.buffer)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.