como alterar qualquer tipo de dados em uma string em python


135

Como posso alterar qualquer tipo de dados em uma string no Python?


10
str(var)? é isso que você está procurando?
SilentGhost

2
Deseja uma representação de dados legível por humanos? Ou você deseja uma visão orientada a byte da memória que contém os dados?
Jeremy Brown

Tenha cuidado com o tipo de dados que você deseja alterar. Veja a resposta abaixo
PythoNic

Respostas:


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

Além disso, tente alternativamente repr:

mystring = repr(myvariable) # '4'

Isso é chamado de "conversão" em python e é bastante comum.


6
Eu não usaria repr (myvariable) - geralmente retorna informações sobre tipo de classe, endereço de memória etc. É mais útil para depuração. Use str (myvariable) para conversão em string e unicode (variável) para conversão em unicode.
Abgan

2
E o unicode? Algo como str(u'ä')não vai funcionar. No entanto repr(u'ä')vai funcionar.
quer

1
e quanto a None e False?
Fredless

54

strdestina-se a produzir uma representação de string dos dados do objeto. Se você está escrevendo sua própria turma e deseja strtrabalhar para você, adicione:

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

print str(myObj)vai ligar myObj.__str__().

repré um método semelhante, que geralmente produz informações sobre as informações da classe. Para a maioria dos objetos da biblioteca principal, reprproduz o nome da classe (e algumas vezes algumas informações da classe) entre colchetes angulares. reprserá usado, por exemplo, apenas digitando seu objeto no painel de interações, sem usar printou qualquer outra coisa.

Você pode definir o comportamento de reprseus próprios objetos, assim como o comportamento de str:

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

>>> myObjno painel de interações ou repr(myObj)resultará emmyObj.__repr__()


Provavelmente, é verdade que a maioria dos objetos principais da biblioteca, em porcentagem bruta, retorna a object.__repr__representação entre colchetes angulares ao estilo, mas muitos dos objetos mais usados ​​não. A regra de ouro para repré que se faz sentido para retornar código Python que poderiam ser avaliadas para produzir o mesmo objeto, fazer isso, assim como str, frozenset, e mais outras builtins fazer, mas se isso não acontecer, use o ângulo do suporte para garantir que o que você retorne não possa ser confundido com uma repr legível por humanos e avaliada como fonte.
precisa saber é

(É claro que alguns dos componentes internos violam essa regra de ouro - um listque inclui ele próprio retorna algo que não apenas parece, mas é um código avaliável, que avalia a coisa errada - mas os desenvolvedores principais nunca aceitaram isso como licença para expandir o mesmo comportamento no stdlib.)
abarnert 21/03

19

Vejo que todas as respostas recomendam o uso str(object). Pode falhar se o seu objeto tiver mais do que caracteres ascii e você verá um erro semelhante ordinal not in range(128). Esse foi o meu caso enquanto eu estava convertendo a lista de strings em outro idioma que não o inglês

Eu o resolvi usando unicode(object)


7
em Python 3.0 em diante, str (objecto) faz Unicode por padrão
dmjalund

13

str(object) fará o truque.

Se você deseja alterar a maneira como o objeto é stringificado, defina o __str__(self)método para a classe do objeto. Esse método deve retornar o objeto str ou unicode.


Qual método é eficiente? str(any_var)ouany_var.__str__()
Kedar.Aitawdekar 15/09/16

@ Kedar.Aitawdekar: Mesmo que haja uma diferença perceptível no tempo de execução (o que duvido, mas encorajo você a alterá-lo usando o timeitmódulo), você deve usar, str(any_var)pois é mais legível para humanos e permite se beneficiar de casos em que any_vardefine, __repr__()mas não ' t define __str__().
quer

Obrigado pela sua resposta.
Kedar.Aitawdekar

12

Use o strbuilt-in:

x = str(something)

Exemplos:

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

...

A partir da documentação:

Retorne uma string contendo uma representação bem imprimível de um objeto. Para cadeias, isso retorna a própria cadeia. A diferença com repr (objeto) é que str (objeto) nem sempre tenta retornar uma string aceitável para eval (); seu objetivo é retornar uma sequência imprimível. Se nenhum argumento for fornecido, retornará a string vazia, ''.


5

Com str(x). No entanto, todo tipo de dados pode definir sua própria conversão de cadeia, portanto, pode não ser o que você deseja.


3
Essa é uma consideração importante, mas rara. Que bom que você mencionou.
10238 jathanism



0

Use a formatação:

"%s" % (x)

Exemplo:

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

Saída: Qui Jan 11 20:40:05 2018


0

Cuidado se você realmente deseja "alterar" o tipo de dados. Como em outros casos (por exemplo, alterando o iterador em um forloop), isso pode gerar um comportamento inesperado:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.