如何在Python中将任何数据类型更改为字符串


135

如何在Python中将任何数据类型更改为字符串?


10
str(var)?这是您要找的东西吗?
SilentGhost

2
您是否需要人类可读的数据字符串表示形式?还是您想要一个包含数据的内存的面向字节的视图?
杰里米·布朗

请注意您要更改的数据类型。请参阅下面的答案
PythoNic

Answers:


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

另外,也可以尝试repr:

mystring = repr(myvariable) # '4'

这在python中称为“转换”,非常普遍。


6
我不会使用repr(myvariable)-它经常返回有关类类型,内存地址等的信息。它对于调试更有用。使用str(myvariable)转换为字符串,使用unicode(variable)转换为unicode。
Abgan

2
unicode呢?像这样的东西str(u'ä')行不通。但是repr(u'ä')会起作用。
Rouven B.

1
那无与错呢?
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代码,做到这一点,就像strfrozenset和大多数其他建宏做的,但如果没有,用尖括号以确保您返回的内容不会被误认为是人类可读和可评估的源代码代表。
abarnert

(当然,某些内建函数违反了这一经验法则— 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对象。


哪种方法有效?str(any_var)any_var.__str__()
Kedar.Aitawdekar

@ Kedar.Aitawdekar:即使执行时间存在明显差异(我对此表示怀疑,但我鼓励您使用timeit模块对其进行修饰),但您仍应使用str(any_var)它,因为它对人类更易读,并且可以从any_var定义__repr__()但没有定义的情况中受益。定义__str__()
Abgan

感谢您的回复。
Kedar.Aitawdekar '16

12

使用str内置的:

x = str(something)

例子:

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

...

从文档中:

返回一个字符串,其中包含对象的可很好打印的表示形式。对于字符串,这将返回字符串本身。与repr(object)的区别在于str(object)并不总是尝试返回eval()可接受的字符串;它的目标是返回可打印的字符串。如果未提供任何参数,则返回空字符串“”。


5

str(x)。但是,每种数据类型都可以定义自己的字符串转换,因此这可能不是您想要的。


3
这是重要但罕见的考虑因素。很好,您提到了它。
詹森(Jathanism)2010年



0

使用格式:

"%s" % (x)

例:

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

输出: 2018年1月11日星期四20:40:05


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.