python 字节字符串上的字符串操作

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

解决方案

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

>>> 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‘

  

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

>>> 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‘)

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

>>> 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‘]

4)大多数情况下,在文本字符串上的操作均可用于字节字符串。然而,这里也有一些需要注意的不同点。首先,字节字符串的索引操作返回整数而不是单独字符。比如:

>>> a = ‘Hello World‘ # Text string
>>> a[0]
‘H‘
>>> a[1]
‘e‘
>>> b = b‘Hello World‘ # Byte string
>>> b[0]
72
>>> b[1]
101
>>>

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

>>> s = b‘Hello World‘
>>> print(s)
b‘Hello World‘ # Observe b‘...‘
>>> print(s.decode(‘ascii‘))
Hello World

  

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

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

  

7)最后需要注意的是,使用字节字符串可能会改变一些操作的语义,特别是那些跟文件系统有关的操作。比如,如果你使用一个编码为字节的文件名,而不是一个普通文本字符串,会禁用文件名的编码/解码。比如:

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

原文地址:https://www.cnblogs.com/baxianhua/p/9127896.html

时间: 2024-08-27 13:57:23

python 字节字符串上的字符串操作的相关文章

python学习之字符串(上)

字符串python 的字符串被划归为不可变序列这一类别,意味着这些字符串所包含的字符存在从左至右的位置顺序,并且他们不可以在原处修改. 字符串常量单引号  'spam'双引号  "spam"三引号   '''...spam...'''   ""...spam...""转义字符 "s\tp\na\om"Raw字符串:r"c:\new\test.spam" 单双引号字符串是一样的在python字符串中,单引号和

chapter . 2.2、Python内置数据结构:字符串、字节和字节数组

字符串 有序的序列,是字符的集合 使用单引号,双引号,三引号引注的字符序列 字符串是不可变对象,我们看到的合并字符串,其实是返回一个由原来两个值复制后返回的值,会占用新的空间. 从python3起,字符串是Unicode类型 s1 = 'string' s2 = '''this's a "string''' s3 = r"hello \n aasdasd"    :r和R表示忽略转义 s4 = R'windows \net' sql = """s

python学习列表字符串字典集合文件操作字符串编码与转换

一.列表 1 names = "ZhangYang GuYun XiangPeng XuLiangchen" 2 names = ["ZhangYang", "GuYun", "XiangPeng", "ChengRongHua","XuLiangchen"] 3 names.append("LeiHaiDong") #在列表最后追加一个元素 4 names.inse

python字符串处理与文件操作

1.strip函数 strip是trim(裁剪)掉字符串两边的空格或字符.(lstrip/rstrip) 如: 空格 theString = ' abcdbcyesornoabcbacdd ' print theString.strip() abcdbcyesornoabcbacdd 字符 theString = 'abcdbcyesornoabcbacdd' print theString.strip('abcd') #去掉两端的abcd字符 yesorno 问题:如何去掉中间空格. theS

python 类的功能,字符串字节,嵌套等相关学习总结

一.运算符 in "hello" in "asdfashellosdfadfadfa" "li" in ['li','ok'] 二.基本数据类型 int a.创建方式 n1 = 123 #根据int类,创建了一个对象 n2 = int123 #根据int类,创建了一个对象 特有的功能在: int类 功能1 功能1 功能1 ... __init__ 初始化 b.int内部优化 n1 = 123 n2 = n1 n1 = 123 n2 = 123 =

python列表、字典、字符串常用操作

Python 列表.字典.字符串常用操作 1.字符串操作 字符串可以通过下标取值,但由于字符串是不可变变量,不可通过下标来修改值. str = 'lily terry mark' name[0]    #获取第1个字符串值 name[0:7]   #获取第1~7的字符串值 name[:7]   #缺省开始位置,默认从第1个元素开始取值 name[0:]   #缺省结束位置,默认到字符串末尾结束 字符串包含判断操作符:in .not in .is 'lily' in names 'lily' no

[面试没有回答上的问题4]常用字符串和数组的操作。

面试的时候有问到我如果用空格分割一个字符串,其实是一个很简单的问题,但是自己突然忘记了,这里做一个对字符串和数组操作的常用方法的一个简单的复习. 字符串部分 1.split(); split() 方法用于把一个字符串分割成字符串数组. 语法 : stringObject.split(separator, howmany) 参数 : separator 必需.字符串或正则表达式,从该参数指定的地方分割 stringObject.如果为("")空字符串,就表示字符串中每个字符都会被分割.

python基础===【字符串】所有相关操作

#字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) #* 字符串复制操作 str1 = '天地不仁以万物为刍狗' result = str1 * 3 print(result) #[] 索引操作 str1 = '柳暗花明又一村' print(str1[1]) print(str1[-2]) #[::]取片操作 str1 = '山重水复疑无路' #获

【Python】07、python内置数据结构之字符串及bytes

一.字符串 1.定义和初始化 In [4]: s = "hello python" In [4]: s = "hello python" In [5]: s Out[5]: 'hello python' In [6]: s = 'hello python' In [7]: s Out[7]: 'hello python' In [8]: s = '''hello python''' In [9]: s Out[9]: 'hello python' In [10]: