Как изменить любой тип данных в строку в Python

135

Как я могу изменить любой тип данных в строку в Python?

duhhunjonn
источник
10
str(var)? это то, что вы ищете?
SilentGhost
2
Вы хотите удобочитаемое строковое представление данных? Или вы хотите побайтно-ориентированное представление памяти, содержащей данные?
Джереми Браун
Будьте осторожны с типом данных, которые вы хотите изменить. Смотрите ответ ниже
PythoNic

Ответы:

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

Также попробуйте repr:

mystring = repr(myvariable) # '4'

Это называется «преобразованием» в Python и встречается довольно часто.

Дональд Майнер
источник
6
Я бы не использовал repr (myvariable) - он часто возвращает информацию о типе класса, адресе памяти и т. Д. Это более полезно для отладки. Используйте str (myvariable) для преобразования в строку и unicode (переменную) для преобразования в unicode.
Абган
2
Что насчет юникода? Нечто подобное str(u'ä')не сработает. Однако repr(u'ä')будет работать.
Рувен Б.
1
как насчет None и False?
fredless
54

strпредназначен для создания строкового представления данных объекта. Если вы пишете свой собственный класс и хотите strработать на себя, добавьте:

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

print str(myObj)позвоню myObj.__str__().

reprэто аналогичный метод, который обычно производит информацию о классе информации. Для большинства базовых объектов библиотеки reprвыдает имя класса (и иногда некоторую информацию о классе) в угловых скобках. reprбудет использоваться, например, просто введя ваш объект в панель взаимодействий, без использованияprint или чего-либо еще.

Вы можете определить поведение reprдля ваших собственных объектов так же, как вы можете определить поведение str:

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

>>> myObjв панели взаимодействий, или repr(myObj), приведет кmyObj.__repr__()

Брайан С
источник
Вероятно, это правда, что большинство объектов базовой библиотеки в процентном выражении возвращают представление object.__repr__угловых скобок -style, но многие из наиболее часто используемых - нет. Правило для reprявляется то , что , если это имеет смысл вернуться Python код , который может быть оценен , чтобы произвести тот же объект, сделать это, так же как str, frozensetи большинство других делать встроенные функции , но если этого не произойдет , используйте угловую-кронштейн форма, чтобы убедиться, что то, что вы возвращаете, не может быть ошибочно принято за читаемое человеком и оцениваемое как источник.
abarnert
(Конечно, некоторые из встроенных программ нарушают это практическое правило - a, listкоторый включает в себя, возвращает что-то, что не только выглядит, но и является оцениваемым кодом, который оценивает не то, что нужно - но разработчики ядра никогда не воспринимали это как лицензию для расширения того же самого поведение в stdlib.)
abarnert
19

Я вижу все ответы рекомендую использовать str(object). Может произойти сбой, если ваш объект содержит больше символов ascii, и вы увидите ошибку вроде ordinal not in range(128). Это было так для меня, когда я конвертировал список строк на языке, отличном от английского

Я решил это с помощью unicode(object)

Мадхава
источник
7
в Python 3.0 и более
поздних версиях
13

str(object) сделает свое дело.

Если вы хотите изменить способ строкового объекта, определите __str__(self)метод для класса объекта. Такой метод должен возвращать объект str или unicode.

Abgan
источник
Какой метод эффективен? str(any_var)илиany_var.__str__()
Kedar.Aitawdekar
@ Kedar.Aitawdekar: Даже если есть заметная разница во времени выполнения (что я сомневаюсь, но я призываю вас проверить его, используя timeitмодуль), вы должны использовать, str(any_var)так как он более читабелен для человека и позволяет извлечь выгоду из случаев, когда any_varопределяет, __repr__()но не делает т определить __str__().
Абган
Спасибо за ваш ответ.
Kedar.Aitawdekar
12

Используйте strвстроенные:

x = str(something)

Примеры:

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

...

Из документации:

Вернуть строку, содержащую хорошо печатаемое представление объекта. Для строк это возвращает саму строку. Разница с repr (объект) заключается в том, что str (объект) не всегда пытается вернуть строку, приемлемую для eval (); его цель - вернуть строку для печати. Если аргумент не указан, возвращает пустую строку ''.

Мик
источник
5

С str(x). Однако каждый тип данных может определять свое собственное преобразование строк, поэтому это может быть не то, что вам нужно.

Philipp
источник
3
Это важное, но редкое соображение. Хорошо, что ты упомянул это.
jathanism
3

Вы можете использовать %sкак ниже

>>> "%s" %([])
'[]'
SuperNova
источник
1

Просто используйте str- например:

>>> str([])
'[]'
Джастин этир
источник
0

Используйте форматирование:

"%s" % (x)

Пример:

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

Выходные: чт 11 января 20:40:05 2018

Апостолоса
источник
0

Будьте осторожны, если вы действительно хотите «изменить» тип данных. Как и в других случаях (например, изменение итератора в forцикле), это может вызвать неожиданное поведение:

>> dct = {1:3, 2:1}
>> len(str(dct))
12
>> print(str(dct))
{1: 31, 2: 0}
>> l = ["all","colours"]
>> len(str(l))
18
вещий
источник