813 votes

Imprimer une chaîne de caractères dans un fichier texte

J'utilise Python pour ouvrir un document texte :

text_file = open("Output.txt", "w")

text_file.write("Purchase Amount: " 'TotalAmount')

text_file.close()

Je veux substituer la valeur d'une variable de type chaîne de caractères. TotalAmount dans le document texte. Quelqu'un peut-il me dire comment faire ?

0 votes

Pourquoi n'avez-vous pas fait w+ ?

1473voto

gnibbler Points 103484

Il est fortement conseillé d'utiliser un gestionnaire de contexte. L'avantage est qu'il permet de s'assurer que le fichier est toujours fermé, quoi qu'il arrive :

with open("Output.txt", "w") as text_file:
    text_file.write("Purchase Amount: %s" % TotalAmount)

Il s'agit de la version explicite (mais n'oubliez jamais que la version du gestionnaire de contexte présentée ci-dessus doit être privilégiée) :

text_file = open("Output.txt", "w")
text_file.write("Purchase Amount: %s" % TotalAmount)
text_file.close()

Si vous utilisez Python2.6 ou supérieur, il est préférable d'utiliser str.format()

with open("Output.txt", "w") as text_file:
    text_file.write("Purchase Amount: {0}".format(TotalAmount))

Pour python2.7 et plus, vous pouvez utiliser {} au lieu de {0}

En Python3, il existe une fonction optionnelle file au paramètre print fonction

with open("Output.txt", "w") as text_file:
    print("Purchase Amount: {}".format(TotalAmount), file=text_file)

Introduction de Python3.6 Cordes en F pour une autre alternative

with open("Output.txt", "w") as text_file:
    print(f"Purchase Amount: {TotalAmount}", file=text_file)

2 votes

En supposant que TotalAmount est un nombre entier, le "%s" ne devrait-il pas être un "%d" ?

6 votes

@RuiCurado, si TotalAmount est un int soit %d o %s fera la même chose.

2 votes

Excellente réponse. Je constate une erreur de syntaxe avec un cas d'utilisation presque identique : with . . .: print('{0}'.format(some_var), file=text_file) est en train de lancer : SyntaxError: invalid syntax au signe égal...

56voto

user1767754 Points 460

Si vous voulez passer plusieurs arguments, vous pouvez utiliser un tuple.

price = 33.3
with open("Output.txt", "w") as text_file:
    text_file.write("Purchase Amount: %s price %f" % (TotalAmount, price))

Plus : Imprimer plusieurs arguments en python

0 votes

Pourquoi n'avez-vous pas fait w+ ?

0 votes

Par préférence, j'aime faire la distinction entre l'écriture et la lecture d'un fichier.

45voto

Rajiv Sharma Points 1786

Si vous utilisez Python3.

alors vous pouvez utiliser Fonction d'impression :

your_data = {"Purchase Amount": 'TotalAmount'}
print(your_data,  file=open('D:\log.txt', 'w'))

Pour python2

Voici l'exemple de Python Print String To Text File (imprimer une chaîne de caractères dans un fichier texte)

def my_func():
    """
    this function return some value
    :return:
    """
    return 25.256

def write_file(data):
    """
    this function write data to file
    :param data:
    :return:
    """
    file_name = r'D:\log.txt'
    with open(file_name, 'w') as x_file:
        x_file.write('{} TotalAmount'.format(data))

def run():
    data = my_func()
    write_file(data)

run()

0 votes

Pourquoi n'avez-vous pas fait w+ ?

4 votes

print(your_data, file=open(...)) laissera le dossier ouvert

0 votes

La meilleure réponse pour python 3 car vous pouvez utiliser les fonctionnalités de la fonction d'impression. Vous n'avez pas besoin de faire un mappage vers str et de concaténer les éléments, il suffit de donner chaque élément à imprimer comme paramètres et de laisser la fonction print faire le reste. Ex : print(arg, getattr(args, arg), sep=", ", file=output)

25voto

naoki fujita Points 371

En utilisant le module pathlib, l'indentation n'est pas nécessaire.

import pathlib
pathlib.Path("output.txt").write_text("Purchase Amount: {}" .format(TotalAmount))

À partir de python 3.6, f-strings est disponible.

pathlib.Path("output.txt").write_text(f"Purchase Amount: {TotalAmount}")

23voto

Guy s Points 483

Si vous utilisez numpy, l'impression d'une (ou plusieurs) chaîne(s) de caractères dans un fichier peut se faire en une seule ligne :

numpy.savetxt('Output.txt', ["Purchase Amount: %s" % TotalAmount], fmt='%s')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X