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

Cos*_*Inc 9 python-3.x

我已经向Python 3提出了Python 2代码.我这样做了,我改变了

print 'String: ' + somestring
Run Code Online (Sandbox Code Playgroud)

print(b'String: '+somestring)
Run Code Online (Sandbox Code Playgroud)

因为我收到以下错误:

Can't convert 'bytes' object to str implicitly
Run Code Online (Sandbox Code Playgroud)

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

global name 'strip' is not defined 
Run Code Online (Sandbox Code Playgroud)

对于

if strip(somestring)=="":    
Run Code Online (Sandbox Code Playgroud)

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

Len*_*bro 11

这里有两个问题,一个是实际问题,另一个是让你感到困惑,但不是实际问题.首先:

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

somestring.decode('UTF-8')
Run Code Online (Sandbox Code Playgroud)

虽然调用str()也有效:

str(somestring, 'UTF8')
Run Code Online (Sandbox Code Playgroud)

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

但是,这不是您的实际问题.您的实际问题是如何剥离字节字符串.并且asnwer是你用与字符串文本字符串相同的方式执行的操作:

somestring.strip()
Run Code Online (Sandbox Code Playgroud)

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

from string import strip
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,当您将参数传递给`strip`(或`rstrip`或`lstrip`)时,参数类型需要与对象类型匹配.也就是说,当你在`bytes`对象上调用`strip`时,参数不能是一个字符串.当我调用`s.rstrip('\ 0')`来删除尾随的空字符时,这让我兴奋不已.我需要将它改为`s.rstrip(b'\ 0')`因为`s`是一个`bytes`对象,而不是`str`. (4认同)

Woo*_*ble 5

>>> b'foo '.strip()
b'foo'
Run Code Online (Sandbox Code Playgroud)

工作得很好。

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