/ / Converti una tupla di oggetti in una tupla di stringhe: pitone, tuple

Converti una tupla di oggetti in una tupla di stringhe: pitone, tuple

>>> import MySQLdb
>>> db = MySQLdb.connect( host = "localhost", user ="root", passwd = "", db = "smoky_db" )
>>> cur = db.cursor()
>>> cur.execute( "SELECT * FROM logs" )
3L
>>> rows = cur.fetchall()
>>> rows
((1L, datetime.datetime(2014, 5, 21, 0, 0)), (1L, datetime.datetime(2014, 5, 22, 0, 0)) )

come posso convertire le tuple restituite di oggetti in tuple di stringhe, Qualcosa del genere:

(("1", "2014-05-21 00:00:00"), ("2", "2014-05-22 00:00:00"))

risposte:

3 per risposta № 1

Semplicemente itera gli oggetti e convertili in tuple, come questo

print tuple(tuple(str(item) for item in items) for items in d)
# (("1", "2014-05-21 00:00:00"), ("1", "2014-05-22 00:00:00"))

Qui abbiamo usato due espressioni generatore. Il più interno (str(item) for item in items) verrà eseguito per ogni elemento della tupla originale. E quando gli elementi nidificati sono stringificati, iteriamo l'espressione del generatore e lo convertiamo nuovamente in una tupla.


2 per risposta № 2

Chiamata str su ogni elemento:

>>> [tuple(map(str, tup)) for tup in tups]
[("1", "2014-05-21 00:00:00"), ("1", "2014-05-22 00:00:00")]

Funziona perché datetime gli oggetti implementano __str__ metodo, essendo chiamato da str funzione. Dal documentazione:

Per una data d, str (d) è equivalente a d.isoformat ("").


1 per risposta № 3

Questo dovrebbe fare il trucco:

out = tuple((str(k),str(v)) for (k,v) in rows)