前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python在生物信息学中的应用:在字节串上执行文本操作

Python在生物信息学中的应用:在字节串上执行文本操作

作者头像
简说基因
发布2024-02-21 16:34:21
720
发布2024-02-21 16:34:21
举报
文章被收录于专栏:简说基因简说基因

如何在字节串(Byte String)上执行常见的文本操作(例如,拆分、搜索和替换)。

解决方案

字节串支持大多数和文本字符串一样的内置操作。例如:

代码语言:javascript
复制
>>> data = b'Hello World'
>>> data[0:5]
b'Hello'
>>> data.startswith(b'Hello')
True
>>> data.split()
[b'Hello', b'World']
>>> data.replace(b'Hello', b'Hello Cruel')
b'Hello Cruel World'
>>>

类似的操作同样适用于字节数组:

代码语言:javascript
复制
>>> data = bytearray(b'Hello World')
>>> data[0:5]
bytearray(b'Hello')
>>> data.startswith(b'Hello')
True
>>> data.split()
[bytearray(b'Hello'), bytearray(b'World')]
>>> data.replace(b'Hello', b'Hello Cruel')
bytearray(b'Hello Cruel World')
>>>

我们也可以在字节串上执行正则表达式的模式匹配操作,但是模式本身需要是字节串的形式来指定。例如:

代码语言:javascript
复制
>>>
>>> data = b'FOO:BAR,SPAM'
>>> import re
>>> re.split('[:,]',data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.3/re.py", line 191, in split
return _compile(pattern, flags).split(string, maxsplit)
TypeError: can't use a string pattern on a bytes-like object
>>> re.split(b'[:,]',data) # Notice: pattern as bytes
[b'FOO', b'BAR', b'SPAM']
>>>

讨论

大多数情况下,几乎所有能在文本字符串上执行的操作都可以在字节串上进行。但是,还是有几个显著区别值得注意。例如:

代码语言:javascript
复制
>>> a = 'Hello World' # Text string
>>> a[0]
'H'
>>> a[1]
'e'
>>> b = b'Hello World' # Byte string
>>> b[0]
72
>>> b[1]
101
>>>

这种语义上的差异会对试图按照字符的方式处理面向字节流数据的程序带来影响。

另外,字节串并没有提供一个美观的字符串表示,因此打印结果并不美观,除非首先将其解码为字符串。例如:

代码语言:javascript
复制
>>> s = b'Hello World'
>>> print(s)
b'Hello World' # Observe b'...'
>>> print(s.decode('ascii'))
Hello World
>>>

最后总结一下,通常来说,如果要同文本打交道,在程序中使用普通的文本字符串就好,不要使用字节串。

参考

  • 《Python Cookbook》第三版
  • http://python3-cookbook.readthedocs.org/zh_CN/latest/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 简说基因 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档