web-dev-qa-db-fra.com

Pourquoi ne puis-je pas rejoindre ce tuple en Python?

e = ('ham', 5, 1, 'bird')
logfile.write(','.join(e))

Je dois le rejoindre pour pouvoir l'écrire dans un fichier texte.

54
TIMEX

join ne prend que des listes de chaînes, donc convertissez-les d'abord

>>> e = ('ham', 5, 1, 'bird')
>>> ','.join(map(str,e))
'ham,5,1,bird'

Ou peut-être plus Pythonic

>>> ','.join(str(i) for i in e)
'ham,5,1,bird'
112
Nick Craig-Wood

join() ne fonctionne qu'avec des chaînes, pas avec des entiers. Utilisez ','.join(str(i) for i in e).

11
djc

Il serait peut-être préférable de convertir d'abord le tuple en liste:

e = ('ham', 5, 1, 'bird') liste = list(e) ','.join(liste)

4
user4805123

Utilisez le module csv . Il enregistrera une question de suivi sur la façon de gérer les éléments contenant une virgule, suivie d'une autre sur la gestion des éléments contenant le caractère que vous avez utilisé pour citer/échapper les virgules.

import csv
e = ('ham', 5, 1, 'bird')
with open('out.csv', 'wb') as f:
    csv.writer(f).writerow(e)

Vérifie ça:

print open('out.csv').read()

Production:

ham,5,1,bird
3
John Machin