Python 2.7: Imprimer dans un fichier


97

Pourquoi essayer d'imprimer directement dans un fichier au lieu de sys.stdoutproduire l'erreur de syntaxe suivante:

Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f1=open('./testfile', 'w+')
>>> print('This is a test', file=f1)
  File "<stdin>", line 1
    print('This is a test', file=f1)
                            ^
SyntaxError: invalid syntax

De l'aide (__ builtins__), j'ai les informations suivantes:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

Alors, quelle serait la bonne syntaxe pour modifier les écritures d'impression de flux standard?

Je sais qu'il existe peut-être de meilleures façons d'écrire dans un fichier, mais je ne comprends vraiment pas pourquoi cela devrait être une erreur de syntaxe ...

Une belle explication serait appréciée!


3
Êtes-vous sûr? print()est la fonction intégrée de python 3.x, tandis que printest l'opérateur python <3.x. Le message montre 2.7.2+.
khachik

2
Avez-vous from __future__ import print_function? En Python <3, l'impression est une déclaration:
Ari

1
Non! Je ne l'ai pas fait. Bien sûr, vous avez raison. Cela résout le problème. Bon sang! Ainsi, l'impression documentée dans l'aide (_ builtins_ ) est la future version (3.x) de print qui a une syntaxe différente. Merci beaucoup et à vous aussi, kachik
alex

2
OMI, help(__builtins__)afficher cela est un bug.
Wooble

3
... bien que, en étudiant plus en détail, python 2.7.2 possède une fonction d'impression intégrée, vous ne pouvez simplement pas y accéder facilement normalement ( __builtins__.__dict__['print'](value, file=f1)cela fonctionne, cependant).
Wooble

Réponses:


138

Si vous souhaitez utiliser la printfonction dans Python 2, vous devez importer depuis __future__:

from __future__ import print_function

Mais vous pouvez aussi avoir le même effet sans utiliser la fonction:

print >>f1, 'This is a test'

72

print est un mot-clé en python 2.X. Vous devez utiliser ce qui suit:

f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()

2
Vous devez ajouter '\ n' pour rendre cet équivalent à imprimer.
jlh

44

print(args, file=f1)est la syntaxe python 3.x. Pour python 2.x utilisez print >> f1, args.


3
Je pense que vous devriez également mentionner from __future__ import print_function. Ensuite, vous pouvez utiliser la notation claire dans les deux, Python 2 et 3.
Martin Thoma

@moose, il y a déjà une excellente réponse de Gandaro, qui comprend ma réponse et votre note.
citxx

2
Je reçois AttributeError: 'str' object has no attribute 'write'votre syntaxe python3
Suncatcher

5
@Suncatcher, vous essayez probablement de passer la chaîne contenant le nom de fichier en tant que f1 au lieu de l'objet fichier réel. Vous devez d'abord ouvrir le fichier pour l'écriture:f1 = open('path_to_your_file', 'w')
citxx

Ouais, j'ai pensé que ça devrait être le nom du fichier, pas l'objet du fichier.
Suncatcher

13

Vous pouvez exporter l'instruction d'impression vers un fichier sans modifier aucun code. Ouvrez simplement une fenêtre de terminal et exécutez votre code de cette manière:

python yourcode.py >> log.txt

11

Cela redirigera votre sortie 'impression' vers un fichier:

import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"

est-ce un patching de singe?
Sarath Sadasivan Pillai du

6

En Python 3.0+, printest une fonction que vous appelleriez print(...). Dans la version précédente, printest une déclaration que vous feriez avec print ....

Pour imprimer dans un fichier en Python antérieur à 3.0, vous feriez:

print >> f, 'what ever %d', i

L' >>opérateur dirige l'impression vers le fichier f.


Je voudrais imprimer un tableau entier dans le fichier. Si j'utilise votre code, seules la tête et la queue du tableau ont été imprimées, comme la sortie du terminal. Comment imprimer toutes les lignes du tableau dans le fichier?
Sigur

@Sigur "Comme la sortie du terminal" Désolé, mais le bogue est ailleurs. Vous ne dites pas à Python d'imprimer le tout, c'est pourquoi ce n'est pas le cas.
wizzwizz4
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.