Python: impression d'un fichier sur stdout

89

J'ai cherché et je ne trouve que des questions sur l'inverse: écrire stdin dans un fichier :)

Existe-t-il un moyen rapide et facile de vider le contenu d'un fichier sur stdout?

météoritepanama
la source

Réponses:

122

Sûr. En supposant que vous ayez une chaîne avec le nom du fichier appelé fname, ce qui suit fait l'affaire.

with open(fname, 'r') as fin:
    print(fin.read())
David Alber
la source
8
Notez que cela ajoutera une nouvelle ligne supplémentaire à la fin de la sortie.
DA
13
Pour la compatibilité Python 3 et en évitant le saut de ligne, la dernière ligne devrait probablement: print(fin.read(), end=""). Pour tirer parti de cette solution sous Python 2, un préfixage from __future__ import print_functionsera nécessaire. Bien sûr, les applications Python 2 doivent toujours utiliser la print()fonction Python 3 de toute façon - ce n'est donc pas un fardeau.
Cecil Curry
42

S'il s'agit d'un fichier volumineux et que vous ne voulez pas consommer une tonne de mémoire comme cela pourrait arriver avec la solution de Ben, le code supplémentaire dans

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

fonctionne également.

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

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

Pour lire le contenu d'un fichier, appelez f.read (size), qui lit une certaine quantité de données et la renvoie sous forme de chaîne. size est un argument numérique facultatif. Lorsque la taille est omise ou négative, tout le contenu du fichier sera lu et renvoyé; c'est votre problème si le fichier est deux fois plus grand que la mémoire de votre machine. Sinon, au plus size octets sont lus et renvoyés. Si la fin du fichier a été atteinte, f.read () renverra une chaîne vide ("").

Ben
la source
7

Ma version abrégée en Python3

print(open('file.txt').read())
mlanzero
la source
2
Remarque: cela ne ferme pas le fichier.
Ben Caine
3

vous pouvez aussi essayer ceci

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

Ninja420
la source
0

Vous pouvez essayer ceci.

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

Cela vous donnera une sortie de fichier.

Shoaib
la source
0

Si vous devez le faire avec le pathlibmodule, vous pouvez utiliser pathlib.Path.open()pour ouvrir le fichier et imprimer le texte à partir de read():

from pathlib import Path

fpath = Path("somefile.txt")

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

Ou appelez simplement pathlib.Path.read_text():

from pathlib import Path

fpath = Path("somefile.txt")

print(fpath.read_text())
RoadRunner
la source
0

Pour améliorer la réponse de @ bgporter, avec Python-3, vous voudrez probablement opérer sur des octets au lieu de convertir inutilement des choses en utf-8:

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