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?

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())

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.


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 ("").


7

Ma version abrégée en Python3

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

2
Remarque: cela ne ferme pas le fichier.
Ben Caine

3

vous pouvez aussi essayer ceci

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


0

Vous pouvez essayer ceci.

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

Cela vous donnera une sortie de fichier.


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())

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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.