2012-03-05 31 views
6

工作我contered一个Python 2代码到Python 3. 在这样做时,我已经改变蟒3:如何使带材()为字节

print 'String: ' + somestring 

print(b'String: '+somestring) 

因为我发现了以下错误:

Can't convert 'bytes' object to str implicitly 
现在我不能执行字符串属性,如带()

但随后,是因为他们不再为字符串处理...

global name 'strip' is not defined 

if strip(somestring)=="":  

我应该如何解决切换串字节,能够使用字符串属性之间这个难题呢?有没有解决方法? 请帮我谢谢你提前..

+0

对不起,它实际上不是一个空字符串我修复它 – CosmicRabbitMediaInc 2012-03-05 01:57:18

+0

所以它应该与字节?我假设在独立的方式使用它不支持python 3?我应该如何解决它等价? – CosmicRabbitMediaInc 2012-03-05 01:59:15

+1

Python 2中没有'strip()'内建的任何一个。 – geoffspear 2012-03-05 02:01:46

回答

8

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

您的字符串是一个字节对象,即一个8位字节的字符串。 Python 3以不同于Unicode的文本处理这一问题。你从哪里得到字符串?既然你想把它当作文本,你应该把它转换成一个用于处理文本的str对象。这通常与.decode()函数来完成,即:

somestring.decode('UTF-8') 

尽管调用STR()也适用:

str(somestring, 'UTF8') 

(请注意,您的解码可能是一些比其他UTF8)

但是,这不是你真正的问题。您的实际问题是如何去除字节字符串。而asnwer是,你这样做的方式和你一样的字符串文本字符串:

somestring.strip() 

没有带()在任何的Python 2或Python 3.内置的字符串中带功能模块在Python 2:

from string import strip 

但一直没有使用好做法,因为字符串有带()方法,就像十年左右了。所以在Python 3中它已经消失了。

+3

请注意,将参数传递给'strip'(或'rstrip'或'lstrip')时,参数类型需要与对象类型匹配。也就是说,当你在'bytes'对象上调用'strip'时,参数不能是字符串。当我调用's.rstrip('\ 0')'去除尾部空字符时,这让我感到沮丧。我需要把它改成's.rstrip(b'\ 0')'因为's'是一个'bytes'对象,而不是'str'。 – 2014-11-19 00:07:49

2

我相信你可以使用“STR”功能将它转换为字符串

print str(somestring).strip() 

也许

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

Python中没有投射 - 你得到一个新的,不同的对象。 – 2012-03-05 17:00:39

+0

true,str(object)返回一个字符串。它实际上是一个新的字符串对象。 – Developer 2012-03-05 19:33:27

+0

第二个选项为我工作,谢谢! – EminezArtus 2016-10-29 18:48:20

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

工程就好了。

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