Cómo cambiar cualquier tipo de datos en una cadena en Python

135

¿Cómo puedo cambiar cualquier tipo de datos en una cadena en Python?

duhhunjonn
fuente
10
str(var)? ¿Es eso lo que estás buscando?
SilentGhost
2
¿Desea una representación de cadena de datos legible por humanos? ¿O desea una vista orientada a bytes de la memoria que contiene los datos?
Jeremy Brown
Tenga cuidado con el tipo de datos que desea cambiar. Vea la respuesta a continuación
PythoNic

Respuestas:

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

También, alternativamente, intente repr:

mystring = repr(myvariable) # '4'

Esto se llama "conversión" en python, y es bastante común.

Donald Miner
fuente
66
No usaría repr (myvariable): a menudo devuelve información sobre el tipo de clase, la dirección de memoria, etc. Es más útil para la depuración. Utilice str (myvariable) para la conversión a cadena y unicode (variable) para la conversión a unicode.
Abgan
2
¿Qué pasa con Unicode? Algo así str(u'ä')no funcionará. Sin embargo repr(u'ä')funcionará.
Rouven B.
1
¿Qué pasa con Ninguno y Falso?
fredless
54

strestá destinado a producir una representación en cadena de los datos del objeto. Si estás escribiendo tu propia clase y quieres strtrabajar para ti, agrega:

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

print str(myObj)llamará myObj.__str__().

repres un método similar, que generalmente produce información sobre la información de la clase. Para la mayoría de los objetos de la biblioteca central, reprproduce el nombre de la clase (y en algún momento alguna información de clase) entre paréntesis angulares. reprse usará, por ejemplo, simplemente escribiendo su objeto en el panel de interacciones, sin usar printni nada más.

Puede definir el comportamiento de reprsus propios objetos al igual que puede definir el comportamiento de str:

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

>>> myObjen su panel de interacciones, o repr(myObj), dará como resultadomyObj.__repr__()

Brian S
fuente
Probablemente sea cierto que la mayoría de los objetos de la biblioteca principal por porcentaje sin procesar devuelven la representación de object.__repr__estilo de paréntesis angular, pero muchos de los más utilizados no lo hacen. La regla de oro para repres que si tiene sentido para devolver el código Python que podrían ser evaluados para producir el mismo objeto, lo que, al igual str, frozensety la mayoría de los otros órdenes internas hacen, pero si no es así, utilizan la escuadra angular formulario para asegurarse de que lo que devuelve no se pueda confundir con una representación humana legible y evaluable como fuente.
abarnert
(Por supuesto, algunas de las construcciones violan esa regla general, una listque se incluye a sí misma devuelve algo que no solo se ve sino que es un código evaluable, que evalúa lo incorrecto, pero los desarrolladores principales nunca lo han tomado como una licencia para expandir el mismo comportamiento en el stdlib.)
abarnert
19

Veo todas las respuestas recomiendan usar str(object). Podría fallar si su objeto tiene más de caracteres ascii y verá un error como ordinal not in range(128). Este fue el caso para mí mientras convertía la lista de cadenas en un idioma que no era inglés

Lo resolví usando unicode(object)

Madhav
fuente
77
en Python 3.0 en adelante, str (objeto) hace unicode por defecto
dmjalund
13

str(object) Hará el truco.

Si desea alterar la forma en que el objeto está en cadena, defina el __str__(self)método para la clase del objeto. Tal método tiene que devolver str u objeto unicode.

Abgan
fuente
¿Qué método es eficiente? str(any_var)oany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Incluso si hay una diferencia notable en el tiempo de ejecución (lo cual dudo, pero le animo a que lo confirme usando el timeitmódulo), debe usarlo str(any_var)ya que es más legible para los humanos y permite beneficiarse de los casos cuando se any_vardefine, __repr__()pero no t definir __str__().
Abgan
Gracias por su respuesta.
Kedar.Aitawdekar
12

Use el strincorporado:

x = str(something)

Ejemplos:

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

...

De la documentación:

Devuelve una cadena que contiene una representación muy bien imprimible de un objeto. Para cadenas, esto devuelve la cadena en sí. La diferencia con repr (objeto) es que str (objeto) no siempre intenta devolver una cadena que sea aceptable para eval (); Su objetivo es devolver una cadena imprimible. Si no se proporciona ningún argumento, devuelve la cadena vacía ''.

miku
fuente
5

Con str(x). Sin embargo, cada tipo de datos puede definir su propia conversión de cadena, por lo que esto podría no ser lo que desea.

Philipp
fuente
3
Esta es una consideración importante pero rara. Qué bueno que lo hayas mencionado.
jathanism
3

Puedes usar %scomo a continuación

>>> "%s" %([])
'[]'
SuperNova
fuente
1

Solo use str, por ejemplo:

>>> str([])
'[]'
Justin Ethier
fuente
0

Usar formato:

"%s" % (x)

Ejemplo:

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

Salida: jue 11 ene 20:40:05 2018

Apostolos
fuente
0

Tenga cuidado si realmente quiere "cambiar" el tipo de datos. Al igual que en otros casos (por ejemplo, cambiar el iterador en un forbucle), esto podría generar un comportamiento inesperado:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
PythoNic
fuente