L'écriture d'une liste dans un fichier avec Python
Est-ce la façon la plus propre d'écrire une liste dans un fichier, depuis writelines()
ne pas insérer des caractères de saut de ligne?
file.writelines(["%s\n" % item for item in list])
Il semble qu'il y aurait un moyen standard...
- notez que
writelines
ne pas ajouter des retours à la ligne, car elle reflète lereadlines
, qui n'a pas également de les supprimer. - oui mais pourquoi ne pas
readlines
supprimer les retours à la ligne? - python a certainement une façon de faire ce que vous moins attendre/préférez
InformationsquelleAutor Josh Arenberg | 2009-05-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une boucle:
En Python 2, vous pouvez également utiliser
Si vous êtes désireux sur un simple appel de fonction, à moins de supprimer les crochets
[]
, de sorte que les chaînes de caractères à imprimer à se faire un à la fois (un genexp plutôt qu'un listcomp) -- pas de raison de prendre toute la mémoire nécessaire pour concrétiser l'ensemble de la liste des chaînes.thefile.write('\n'.join(thelist))
thefile.write(str(item) + "\n")
TestFile = open("Test.txt","w+")
TestFile.write("This is a test!!!!!")
TestFile.close
seulement me donne un fichier texte videTest.txt
Ce que je fais mal?Qu'allez-vous faire avec le fichier? Ne ce fichier existe pour les humains, ou d'autres programmes avec claire des exigences d'interopérabilité?
Si vous essayez juste de sérialiser une liste sur le disque pour une utilisation ultérieure par le même python application, vous devez être pickleing la liste.
À lire:
open( "save.p", "wb" )
infile est quelque chose comme:open( "save.p", "rb" )
La meilleure façon est:
+ "\n"
à la fin. Ne pas voir ce problème @Dave a avec ce.outfile
variable?outfile = open("output.txt", "w") # 'w' open file for writing and truncate it content
ouwith open("output.txt", "w") as outfile: # use outfile here
.Encore une autre façon. Sérialiser en json à l'aide de simplejson (inclus en tant que json en python 2.6):
Si vous examinez output.txt:
C'est utile parce que la syntaxe est pythonic, il est lisible par l'homme, et il peut être lu par d'autres programmes dans d'autres langues.
À l'aide de Python 3 et Python 2.6+ syntaxe:
C'est indépendant de la plateforme. Il met aussi fin à la dernière ligne avec un caractère de saut de ligne, ce qui est un UNIX meilleures pratiques.
file_handler.write("\n".join(str(item) for item in the_list))
J'ai pensé qu'il serait intéressant d'explorer les avantages de l'utilisation d'un genexp, voici donc mon point de vue.
L'exemple en question utilise des crochets pour créer une liste temporaire, et est donc équivalent à:
Qui inutilement constructions temporaires liste de toutes les lignes qui sera écrit, cela peut consommer d'importantes quantités de mémoire selon la taille de votre liste et la façon dont détaillé de la sortie de
str(item)
est.Déposer les crochets (l'équivalent du retrait de l'emballage
list()
appel ci-dessus) au lieu de passer temporaire générateur àfile.writelines()
:Ce générateur va créer un saut de ligne-mis fin à la représentation de votre
item
des objets à la demande (c'est à dire qu'ils sont écrites). C'est bien pour un couple de raisons:str(item)
est lent, il y a des progrès visibles dans le fichier que chaque élément est traitéCela évite les problèmes de mémoire, tels que:
(J'ai déclenché cette erreur en limitant Python max. la mémoire virtuelle à ~100 MO avec
ulimit -v 102400
).Mettre de l'utilisation de la mémoire d'un côté, cette méthode n'est en fait pas plus vite que l'original:
(Python 2.6.2 sur Linux)
Sérialiser liste dans un fichier texte avec virgule sepparated valeur
Parce que je suis paresseux....
with open ('Sp1.txt', 'a') as outfile:
json.dump (sp1_segments, outfile)
logger.info ("Saved sp_1 segments")
; le problème est que mon programme s'exécute trois fois, et les résultats de trois essais se sont réduits en purée. est-il possible d'ajouter 1-2 lignes vides ainsi que les résultats de chaque course sont perceptibles?json.dump(sp1_segments + "\n\n", outfile)
?En Général
La syntaxe est la suivante pour writelines() méthode
Exemple
Référence
http://www.tutorialspoint.com/python/file_writelines.htm
file
variable?Vous pouvez également utiliser la fonction d'impression si vous êtes sur python3 comme suit.
Pourquoi n'essayez-vous pas
Cette logique va d'abord convertir les éléments en
string(str)
. Parfois, la liste contient un tuple commeCette logique d'écriture de fichier de chaque tuple dans une nouvelle ligne. Plus tard, nous pouvons utiliser
eval
lors du chargement de chaque tuple lors de la lecture du fichier:Une autre façon de retravailler et d'ajouter un saut de ligne:
Laissez-moy la liste, puis:
Vous pouvez utiliser
%e
ou%s
en fonction de vos besoins.Comment Il Fonctionne:
Tout d'abord, ouvrez un fichier en utilisant le construit en fonction d'ouverture et en spécifiant le nom de
le fichier et le mode dans lequel nous voulons ouvrir le fichier. La mode peut être un
mode de lecture ("r"), le mode write (’w’) ou en mode append (’a’). On peut aussi spécifier l'
si nous sommes à la lecture, l'écriture, ou en ajoutant en mode texte ("t") ou binaire
mode (’b’). Il y a effectivement beaucoup plus de modes disponibles et de l'aide(ouvert)
vous donnera plus de détails à leur sujet. Par défaut, open() considère que le fichier à
être un "t'ext fichier et l'ouvre en" r'ead mode.
Dans notre exemple, nous avons d'abord ouvrir le fichier en écriture en mode texte et utiliser l'écriture
méthode de l'objet fichier à écrire dans le fichier et puis nous avons enfin fermer le fichier.
L'exemple ci-dessus est tirée du livre "Un Octet de Python" par Swaroop C H.
swaroopch.com