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 ?
Réponses
Trop de publicités?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')
- Réponses précédentes
- Plus de réponses