2009-11-29 14 views
41
e = ('ham', 5, 1, 'bird') 
logfile.write(','.join(e)) 

que tienen que unirse a ella para que pueda escribir en un archivo de texto.¿Por qué no puedo unirme a esta tupla en Python?

+10

Por cierto, sabias que ¿Puedes escribir tu primera línea sin los paréntesis? Es bueno acabar con lo que es esencialmente ruido. – djc

Respuesta

85

join sólo toma listas de cadenas, por lo que convertirlos primero

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

o tal vez más Pythonic

>>> ','.join(str(i) for i in e) 
'ham,5,1,bird' 
+4

usando str() en lugar de repr() puede causar pérdida de información. –

+1

Depende de cuál es su propósito, pero 'str()' es generalmente lo que se quiere mostrar algo al usuario (es decir, en un archivo de registro que era lo que quería el OP). –

+1

De hecho. str (__str__ o mejor, __unicode__) es para humanos. Y la pregunta establece un archivo de registro, que es para humanos. Entonces, en este caso, creo que str() es mejor que __repr__. – extraneon

10

join() sólo funciona con cadenas, no con números enteros. Use ','.join(str(i) for i in e).

+0

El comentario sobre tuplas sin paréntesis es genial. –

3

Uso del módulo csv. Se ahorrará una pregunta de seguimiento sobre cómo manejar los elementos que contengan una coma, seguida de otra sobre el manejo de artículos que contienen el carácter que ha utilizado para citar/escapar de las comas.

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

Check it:

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

Salida:

ham,5,1,bird 
+3

Parece innecesariamente complicado. –

+1

@LS: no todo es lo que parece. Simplificando el uso de separadores de comas sin preocuparse por escapar de las comas, etc. se despega muy rápido. –

4

Usted puede ser mejor simplemente convertir la tupla a una primera lista:

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

Cuestiones relacionadas