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?


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.


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__()


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)


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.


¿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 ''.


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.


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



0

Usar formato:

"%s" % (x)

Ejemplo:

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

Salida: jue 11 ene 20:40:05 2018


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.