e = ('ham', 5, 1, 'bird')
logfile.write(','.join(e))
Devo unirmi per poterlo scrivere in un file di testo.Perché non posso unirmi a questa tupla in Python?
e = ('ham', 5, 1, 'bird')
logfile.write(','.join(e))
Devo unirmi per poterlo scrivere in un file di testo.Perché non posso unirmi a questa tupla in Python?
join
richiede solo liste di stringhe, in modo da convertirli prima
>>> e = ('ham', 5, 1, 'bird')
>>> ','.join(map(str,e))
'ham,5,1,bird'
o forse più divinatorio
>>> ','.join(str(i) for i in e)
'ham,5,1,bird'
utilizzando str() anziché repr() può causare PERDITA DI INFORMAZIONI. –
Dipende da quale sia il tuo scopo, ma 'str()' è generalmente ciò che vuoi mostrare all'utente (cioè in un logfile che era ciò che l'OP voleva). –
Infatti. str (__str__ o meglio, __unicode__) è per gli umani. E la domanda indica un file di registro, che è per gli umani. Quindi in questo caso penso che str() sia migliore di __repr__. – extraneon
join()
funziona solo con stringhe, non con numeri interi. Utilizzare ','.join(str(i) for i in e)
.
Il commento sulle tuple senza parentesi è ottimo. –
utilizzare il modulo csv
. Salva una domanda successiva su come gestire gli elementi contenenti una virgola, seguita da un'altra sulla gestione degli elementi contenenti il carattere che hai usato per citare/sfuggire le virgole.
import csv
e = ('ham', 5, 1, 'bird')
with open('out.csv', 'wb') as f:
csv.writer(f).writerow(e)
lo controlla:
print open('out.csv').read()
uscita:
ham,5,1,bird
Sembra inutilmente complicato. –
@LS: Tutto non è quello che sembra. Semplicisticamente usando i separatori di virgola senza preoccuparsi di sfuggire alle virgole, ecc., Si sblocca molto velocemente. –
Si potrebbe essere meglio semplicemente convertire il tuple a una lista prima:
e = ('ham', 5, 1, 'bird') liste = list(e) ','.join(liste)
BTW, lo sapevi? puoi scrivere la tua prima riga senza le parentesi? È bello fare a meno di ciò che è essenzialmente rumore. – djc