python 3:如何使strip()为字节工作

时间:2012-03-05 01:53:16

标签: python-3.x

我认为Python 2的Python 2代码。 这样做,我改变了

print 'String: ' + somestring

print(b'String: '+somestring)

因为我收到以下错误:

Can't convert 'bytes' object to str implicitly

但是现在我无法实现像strip()这样的字符串属性,因为它们不再被视为字符串......

global name 'strip' is not defined 

if strip(somestring)=="":    

如何解决将字符串切换为字节并能够使用字符串属性之间的这种困境?有解决方法吗? 请帮帮我,并提前感谢你..

4 个答案:

答案 0 :(得分:11)

这里有两个问题,一个是实际问题,另一个是令你困惑,但不是实际问题。首先:

您的字符串是一个字节对象,即一个8位字节的字符串。 Python 3处理的方式与文本不同,后者是Unicode。你从哪里得到字符串?由于您希望将其视为文本,因此您应该将其转换为str对象,该对象用于处理文本。这通常使用.decode()函数完成,即:

somestring.decode('UTF-8')

尽管调用str()也有效:

str(somestring, 'UTF8')

(请注意,您的解码可能不是UTF8)

但是,这不是您的实际问题。您的实际问题是如何剥离字节字符串。 asnwer就是你用与串起文本字符串相同的方式:

somestring.strip()

Python 2或Python 3中没有内置的strip()。在Python 2的字符串模块中有一个strip-function:

from string import strip

但是使用它并不是一个好习惯,因为字符串有一个strip()方法,现在已经十年左右了。所以在Python 3中它已经消失了。

答案 1 :(得分:2)

我相信您可以使用“str”函数将其强制转换为字符串

print str(somestring).strip()

或者

print str(somestring, "utf-8").strip()

答案 2 :(得分:2)

>>> b'foo '.strip()
b'foo'

工作得很好。

如果您正在处理的是文本,那么您可能应该只有一个实际的str对象,而不是bytes个对象。

答案 3 :(得分:0)

但是,如果对象已经是一个字符串,则不会得到新的字符串。因此,如果不确定某个对象是否为字符串,是否需要该对象并调用str(obj),则即使该对象已经是字符串,也不会创建另一个对象。

x='123'
id(x)
2075707536496
y=str(x)
id(y)
2075707536496