美文网首页
Python3 - 字节字符串上的字符串操作

Python3 - 字节字符串上的字符串操作

作者: 惑也 | 来源:发表于2018-12-19 19:45 被阅读26次

问题

在字节字符串上执行普通的文本操作(比如移除,搜索和替换)。

解决方案

字节字符串同样也支持大部分和文本字符串一样的内置操作。比如:

data = b'Hello World'

print(data[0:4])
print(data.startswith(b'Hell'))
print(data.split())
print(data.replace(b'World', b'Python'))

b'Hell'
True
[b'Hello', b'World']
b'Hello Python'

这些操作同样也适用于字节数组。比如:

dt = bytearray(b'Hello World')
print(dt[0:4])
print(dt.startswith(b'Hell'))
print(dt.split())
print(dt.replace(b'World', b'Python'))

bytearray(b'Hell')
True
[bytearray(b'Hello'), bytearray(b'World')]
bytearray(b'Hello Python')

可以使用正则表达式匹配字节字符串,但是正则表达式本身必须也是字节串。比如:

import re
d = b'FOO:BAR,SPAM'
print(re.split(b'[,:]', d))    # 正则匹配部分必须是字节
[b'FOO', b'BAR', b'SPAM']

讨论

大多数情况下,文本字符串上的操作均可用于字节字符串。 然而,这里也有一些需要注意的不同点。

首先,字节字符串的索引操作返回整数而不是字符,这种语义上的区别会对处理面向字节的字符数据有影响。比如:

a = 'Hello World'
b = b'Hello World'

print(a[0])
print(b[0])

H
72

第二点,字节字符串不会提供一个美观的字符串表示,也不能很好的打印出来,除非它们先被解码为一个文本字符串。比如:

s = b'Hello World'
print(s)
print(s.decode('ascii'))

b'Hello World'
Hello World

如果想格式化字节字符串,得先使用标准的文本字符串,然后将其编码为字节字符串。比如:

print('{:10s} {:10d} {:10.2f}'.format('ACME', 100, 490.1).encode('ascii'))
b'ACME              100     490.10'

最后提一点,一些程序员为了提升程序执行的速度会倾向于使用字节字符串而不是文本字符串。 尽管操作字节字符串确实会比文本更加高效(因为处理文本固有的Unicode相关开销)。 这样做通常会导致非常杂乱的代码。你会经常发现字节字符串并不能和Python的其他部分工作的很好, 并且你还得手动处理所有的编码/解码操作。 坦白讲,如果你在处理文本的话,就直接在程序中使用普通的文本字符串而不是字节字符串。不做死就不会死!

相关文章

  • Python3 - 字节字符串上的字符串操作

    问题 在字节字符串上执行普通的文本操作(比如移除,搜索和替换)。 解决方案 字节字符串同样也支持大部分和文本字符串...

  • 在字节串上执行文本操作

    就绝大部分情况而言,几乎所有能在文本字符串上执行的操作同样也可以在字节串上进行 ,如下示例: 还有几个显著的区别:

  • bytes(18)

    在Python3以后,字符串和bytes类型彻底分开了。字符串是以字符为单位进行处理的,bytes类型是以字节为单...

  • python3基础01数值和字符串(一)

    本篇系统梳理python3数值类型,数值计算;字符串类型,字符串操作。 更好阅读体验请戳: python3基础01...

  • 基础字符串

    字符串.length找到字符串的长度字符串[数字] = 下标 例句 通过下标找字符串的方式: 字符串上的方法 字...

  • Python的编码问题总结

    字节字符串和字符字符串字节字符串s是在console上看着是中文,但是正在输出的确是字节字符串,而不是字符字符串。...

  • python2的编码和解码问题

    怀念python3 python3默认情况下,是通过Unicode直接编码操作的,对于字符串,特殊字符,数字的支持...

  • Python2编码的问题

    1.怀念python3 python3默认情况下,是通过unicode直接编码操作的,对于字符串、特殊字符、数字的...

  • 大话python字符串

    一、字符串类型 python3: python语言有两种不同的字符串,一个用于存储文本,一个用于存储原始字节。文本...

  • 2018-01-02

    字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串,如果找到字符串,则返回字符的起始位置...

网友评论

      本文标题:Python3 - 字节字符串上的字符串操作

      本文链接:https://www.haomeiwen.com/subject/ythskqtx.html