2017-08-28 5 views
-1

Je dois écrire un tableau d'entiers dans un fichier texte, mais la solution formatée ajoute la virgule après chaque élément et je voudrais évite le dernier.Comment éviter la dernière virgule lors de l'écriture d'un tableau d'entiers dans un fichier texte en python

Le code ressemble à ceci:

 with open(name, 'a+') as f: 
      line = ['FOO ', description, '|Bar|'] 
      f.writelines(line) 
      f.writelines("%d," % item for item in values) 
      f.writelines('\n') 

Chaque ligne commence par une petite description de ce que le tableau à suivre contient, puis une liste d'entiers. De nouvelles lignes sont ajoutées dans la boucle dès qu'elles sont disponibles.

La sortie je me ressemble à ceci:

Description FOO | Bar | 274.549.549.824.824.824.824.824.794.765.765.736.736.736.736.736,

Et je voudrais avoir l'air comme ça, sans la virgule:

FOO description | Barre | 274,549,549,824,824,824,824,824,794,765,765,736,736,736,736,736

Je ne pouvais pas trouver une solution qui fonctionnerait avec les writelines() et j'ai besoin d'éviter un long traitement dans des boucles supplémentaires.

+0

convertir la chaîne à la liste par correspondance ou quelque chose puis faites: obj.rstrip (« ») après que l'écrire dans le fichier texte tel qu'il va enfin besoin d'un fichier texte (string) pour écrire dans un fichier ! –

+4

Utilisez '','. Join (valeurs)' à la place de la mise en forme? –

+0

@Jon, c'est une réponse. Si vous ne voulez pas l'écrire, je vais prendre les points. :-) – user1712447

Répondre

7

Utilisation join:

f.writelines(",".join(map(str,values))) 

Notez que values est d'abord mis en correspondance avec une liste de chaînes, au lieu de chiffres, avec map.

+0

Cela fonctionnera, mais je dois garder des nombres sans les convertir en chaînes – TeilaRei

+0

Le contenu écrit dans un fichier est toujours écrit comme une chaîne, vous le convertissez en chaîne avec l'opérateur '%', et la sortie désirée vous avoir à la fin de votre question est une chaîne. Je dois donc demander: Que voulez-vous dire? – trincot

+0

C'est un bon point, pour une raison quelconque, je n'ai pas été conscient de cette transformation. Je suppose que je cherchais un moyen de préserver le type original des données, mais cela ne semble pas possible avec le fichier texte. – TeilaRei

1

Vous pouvez le découper en utilisant l'exemple ci-dessous. Il effacera toujours le dernier caractère.

line = ['FOO ', description, '|Bar|'] 
line = line[:-1] 
f.writelines(line) 
0

Vous pouvez utiliser la fonction d'impression ici.

print(*values,sep=',',file=f) 

Si vous utilisez python2, veuillez importer la fonction d'impression.

from __future__ import print_function 
0

Le découpage est la meilleure approche et fonctionne bien pour chaque situation au moins dans votre cas.

f.writelines(line[:-1])