358 votes

Écriture d'une chaîne de caractères dans un fichier sur une nouvelle ligne à chaque fois

Je veux ajouter une nouvelle ligne à ma chaîne chaque fois que j'appelle file.write() . Quel est le moyen le plus simple de faire cela en Python ?

0voto

user139734 Points 29

Si write est un callback, vous pouvez avoir besoin d'un writeln personnalisé.

  def writeln(self, string):
        self.f.write(string + '\n')

Lui-même à l'intérieur d'un ouvreur personnalisé. Voir les réponses et les commentaires pour cette question : sous-classement des objets fichiers (pour étendre les opérations d'ouverture et de fermeture) en python 3

(Gestionnaire de contexte)

J'ai été confronté à ce problème lorsque j'ai utilisé ftplib pour "récupérer des lignes" d'un fichier qui était "basé sur des enregistrements" (FB80) :

with open('somefile.rpt', 'w') as fp:
     ftp.retrlines('RETR USER.REPORT', fp.write)

et je me suis retrouvé avec un long enregistrement sans nouvelles lignes, c'est probablement un problème avec ftplib, mais obscur.

C'est donc devenu :

with OpenX('somefile.rpt') as fp:
     ftp.retrlines('RETR USER.REPORT', fp.writeln) 

Il fait le travail. C'est un cas d'utilisation que quelques personnes vont rechercher.

Déclaration complète (seules les deux dernières lignes sont de moi) :

class OpenX:
    def __init__(self, filename):
        self.f = open(filename, 'w')

    def __enter__(self):
        return self.f

    def __exit__(self, exc_type, exc_value, traceback):
        self.f.close()

    def writeln(self, string):
        self.f.write(string + '\n')

0voto

Assaf-ge Points 196

Afin de supporter l'utilisation de plusieurs systèmes d'exploitation : file.write(f'some strings and/or {variable}. {os.linesep}')

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