come modificare qualsiasi tipo di dati in una stringa in Python


135

Come posso modificare qualsiasi tipo di dati in una stringa in Python?


10
str(var)? è quello che stai cercando?
SilentGhost,

2
Vuoi una rappresentazione in stringa dei dati leggibile dall'uomo? Oppure vuoi una vista orientata ai byte della memoria contenente i dati?
Jeremy Brown,

Fai attenzione al tipo di dati che desideri modificare. Vedi la risposta sotto
PythoNic il

Risposte:


126
myvariable = 4
mystring = str(myvariable)  # '4'

inoltre, in alternativa prova repr:

mystring = repr(myvariable) # '4'

Questa è chiamata "conversione" in Python ed è abbastanza comune.


6
Non vorrei usare repr (myvariable) - spesso restituisce informazioni sul tipo di classe, l'indirizzo di memoria ecc. È più utile per il debug. Usa str (myvariable) per la conversione in stringa e unicode (variabile) per la conversione in unicode.
Abgan,

2
Che dire di unicode? Qualcosa del genere str(u'ä')non funzionerà. Comunque repr(u'ä')funzionerà.
Rouven B.

1
che dire di None e False?
fredless,

54

strè pensato per produrre una rappresentazione in forma di stringa dei dati dell'oggetto. Se stai scrivendo la tua lezione e vuoi strlavorare per te, aggiungi:

def __str__(self):
    return "Some descriptive string"

print str(myObj)chiamerà myObj.__str__().

reprè un metodo simile, che generalmente produce informazioni sulle informazioni sulla classe. Per la maggior parte dell'oggetto libreria principale, reprproduce il nome della classe (e talvolta alcune informazioni sulla classe) tra parentesi angolari. reprverrà utilizzato, ad esempio, semplicemente digitando l'oggetto nel riquadro delle interazioni, senza utilizzare printo altro.

Puoi definire il comportamento di reprper i tuoi oggetti proprio come puoi definire il comportamento di str:

def __repr__(self):
    return "Some descriptive string"

>>> myObjnel riquadro delle interazioni, o repr(myObj), comporteràmyObj.__repr__()


È probabilmente vero che la maggior parte degli oggetti della libreria principale in percentuale grezza restituisce la object.__repr__rappresentazione di parentesi angolari in stile, ma molti di quelli più comunemente usati non lo fanno. La regola generale per reprè che se ha senso restituire il codice Python che potrebbe essere valutata per produrre lo stesso oggetto, farlo, come str, frozensete molti altri builtins fare, ma se non è così, usa l'angolo staffa modulo per assicurarsi che ciò che si restituisce non possa essere scambiato per un repr leggibile e valutabile come fonte.
abarnert,

(Naturalmente alcuni dei builtin violano quella regola empirica - una listche include se stessa restituisce qualcosa che non solo assomiglia ma è un codice valutabile, che valuta la cosa sbagliata - ma gli sviluppatori principali non l'hanno mai preso come licenza per espandere lo stesso comportamento nello stdlib.)
abarnert

19

Vedo che tutte le risposte raccomandano l'uso str(object). Potrebbe non riuscire se il tuo oggetto ha più di caratteri ASCII e vedrai un errore simile ordinal not in range(128). Questo è stato il caso per me mentre stavo convertendo un elenco di stringhe in una lingua diversa dall'inglese

L'ho risolto usando unicode(object)


7
in Python 3.0 in poi, str (oggetto) fa unicode di default
dmjalund

13

str(object) farà il trucco.

Se si desidera modificare il modo in cui l'oggetto viene rigorosamente definito, definire il __str__(self)metodo per la classe dell'oggetto. Tale metodo deve restituire l'oggetto str o unicode.


Quale metodo è efficiente? str(any_var)oppureany_var.__str__()
Kedar.Aitawdekar,

@ Kedar.Aitawdekar: anche se c'è una notevole differenza nei tempi di esecuzione (che dubito, ma ti incoraggio a veicolare con il timeitmodulo), dovresti usare str(any_var)poiché è più leggibile per l'uomo e consente di beneficiare dei casi quando any_vardefinisce __repr__()ma non lo fa definire __str__().
Abgan,

Grazie per la tua risposta.
Kedar.Aitawdekar,

12

Usa il strbuilt-in:

x = str(something)

Esempi:

>>> str(1)
'1'
>>> str(1.0)
'1.0'
>>> str([])
'[]'
>>> str({})
'{}'

...

Dalla documentazione:

Restituisce una stringa contenente una rappresentazione ben stampabile di un oggetto. Per le stringhe, questo restituisce la stringa stessa. La differenza con repr (oggetto) è che str (oggetto) non tenta sempre di restituire una stringa accettabile per eval (); il suo obiettivo è restituire una stringa stampabile. Se non viene fornito alcun argomento, restituisce la stringa vuota ''.


5

Con str(x). Tuttavia, ogni tipo di dati può definire la propria conversione di stringhe, quindi potrebbe non essere quello che desideri.


3
Questa è una considerazione importante ma rara. Bene che tu l'abbia menzionato.
jatanismo



0

Usa la formattazione:

"%s" % (x)

Esempio:

x = time.ctime(); str = "%s" % (x); print str

Uscita: gio 11 gen 20:40:05 2018


0

Fai attenzione se vuoi veramente "cambiare" il tipo di dati. Come in altri casi (ad esempio, la modifica dell'iteratore in un forciclo) ciò potrebbe comportare comportamenti imprevisti:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.