como alterar qualquer tipo de dados em uma string em python

135

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

duhhunjonn
fonte
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.

Donald Miner
fonte
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__()

Brian S
fonte
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)

Madhav
fonte
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.

Abgan
fonte
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, ''.

miku
fonte
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.

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

Você pode usar %scomo abaixo

>>> "%s" %([])
'[]'
Super Nova
fonte
1

Basta usar str- por exemplo:

>>> str([])
'[]'
Justin Ethier
fonte
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

Apostolos
fonte
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
PythoNic
fonte