百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

python 了解bytes与str的区别(bytes和str)

off999 2024-11-03 14:20 51 浏览 0 评论

知识点:

  1. bytes包含的是由8位值所组成的序列,str包含的是由 Unicode码点所组成的序列。
  2. 我们可以编写辅助函数来确保程序收到的字符序列确实是期望要操作的类型(要知道自己想操作的到底是 Unicode码点,还是原始的8位值。用UTF-8标准给字符串编码,得到的就是这样的一系列8位值)。
  3. bytes与str这两种实例不能在某些操作符(例如>、==、+、%操作符)上面混用。
  4. 从文件中读取二进制数据(或者把二进制数据写入文件)时,应该用'rb'('wb')这样的二进制模式打开文件。
  5. 如果要从文件中读取(或者要写入文件之中)的是 Unicode数据,那么必须注意系统默认的文本编码方案。若无法肯定,可通过 encoding参数明确指定。

我们先来看一段代码吧:

a = b'h\x65llo'  # 这个是一个bytes字节  \x代表这是一个16进制,而一位十六进制代表了四位二进制,所以这里两位十六进制代表了8位二进制,也就是说这代表一个字节,最终解释出来是e
print(list(a))  # 8位的二进制转换成10进值来表述的值。
print(a)  # 直接打印出来的效果

运行结果:
>>>[104, 101, 108, 108, 111]
>>>b'hello'

在python这种语言,字符串b开头表示bytes字节,字符串里面的\x代表这是一个16进制,而一位十六进制代表了四位二进制,所以这里两位十六进制代表了8位二进制,也就是说这代表一个字节,最终解释出来是e

为什么不直接写b'hello'?这个是为了方便我们理解bytes是由8位值组成。在计算机里面str 等于 bytes, 而bytes却不等于str, 因为计算机bytes可以表示更多的格式,音频、视频、字符串、文档等等。

b = b''         # 创建一个空的bytes
b = bytes()      # 创建一个空的bytes
b = b'hello'    #  直接指定这个hello是bytes类型
b = bytes('string',encoding='编码类型')  #利用内置bytes方法,将字符串转换为指定编码的bytes
b = str.encode('编码类型')   # 利用字符串的encode方法编码成bytes,默认为utf-8类型

bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。

str类型:

a = 'a\u0300 hello \u4f60\u597d'   # \u代表 Unicode码点
print(list(a))
print(a)

运行结果:
>>>['a', '?', ' ', 'h', 'e', 'l', 'l', 'o', ' ', '你', '好']
>>>a? hello 你好

python3,不需要像python2那样复杂的转码,因为他是采用Unicode,全世界的语言的支持,不会出现乱码。

但是str在转换成bytes的时候就需要注意了,因为一些特定的场景是转换时是需要编码格式的,但是如果没有指定的话默认都是UTF-8。


辅助函数:

def to_str(bytes_or_str):
    if isinstance(bytes_or_str, bytes):  # 判断是否bytes类型
        value = bytes_or_str.decode('utf-8')
    else:
        value = bytes_or_str
    return value

print(repr(to_str(b'foo')))
print(repr(to_str('bar')))

运行结果:
>>>'foo'
>>>'bar'

上面的辅助函数会先对值类型进行判断,如果判断是bytes类型就会进行解码。当然,上面的代码还是有点问题,bytes如果是编码类型不是utf-8那么解码出来的数据就是一堆乱码。


bytes与str这两种实例不能在某些操作符(例如>、==、+、%操作符)上面混用:

print(b'one' + b'two')
print('one' + 'two')

运行结果:
>>>b'onetwo'
>>>onetwo

有了前面关于beyts与str两种类型的基本认识,我们来看看上面这段代码是成立的,bytes与bytes可以使用操作符进行拼接,str类型也一样,但是下面的代码就出出错。

print(b'one' + 'two')
print('one' + b'two')

运行结果:
>>>TypeError: can't concat str to bytes
>>>TypeError: can only concatenate str (not "bytes") to str

上面的代码如果没有用try去捕获异常的话,执行到第一行的时候程序就会终止,不再往下继续执行,如果两行都复制去执行是不会看到这两个运行结果的。

再来看看这个例子:

a=b'ab'
print(list(a))
print(b'a' > b'b')
print(b'a' == 'a')

运行结果:
>>>[97, 98]
>>>False
>>>False

正常:

print('a' > b'b')

运行结果:
>>>TypeError: '>' not supported between instances of 'str' and 'bytes'

写入用bytes需要用wb模式,但是如果需要直接读取出数据,如果确定知道是文本那么可以用r模式,如果不是默认的编码格式还需要指定一下。

with open('test.bin', 'wb') as f:
    f.write(b'\xf1\xf2\xf3\xf4\xf5')

with open('test.bin', 'rb') as f:
    data = f.read()

print(data == b'\xf1\xf2\xf3\xf4\xf5')

with open('test.bin', 'r', encoding='cp1252') as f:
    data = f.read()
    print(data)

运行结果:
>>>True
>>>?òó??

关于bytes与str就这么多了。

相关推荐

下载全民k歌免费安装(找回《全民k歌》)

打开全民k歌网页版,打开想要下载的歌曲按F12,点击Network的选项,再按ctrl+R找到里面最大的文件,右键openlinkinnewtab新的页面中右键另存为,就可以下载了1.确保您的手机支...

oa软件排行榜前十名(oa软件下载)

OA办公软件有很多,例如泛微、致远、蓝凌、华天动力、索昂、通达、飞企、微宏、万户、金和、今目标、协众、云之家、泛普、明道、天翎、手册类、安创安全OA、小熊OA等相对大型企业来说,中小型企业的管理规范...

免费下载优酷视频(优酷下载 安装)

首先,你要开通优酷VIP,不然很多电影都下载不了,其次就是打开手机上的优酷,找到自己想看的电影,点击进去,然后再播放页面,点击下面的下载按钮。选择下载版本的质量进行下载,有超清,高清,标清,然后返回到...

qq恢复官网(QQ恢复官网网站)

打开浏览器,然后搜索QQ恢复官方网站,搜索到之后,点击进入;登录帐号,然后选择恢复QQ群,选择要恢复的群,点击确定即可。;注:只能用于找回最近28天内删除的群成员,以及解散、转让的群。如果误删的QQ群...

手机版英雄联盟(手机版英雄联盟有云顶之弈吗)

第一行是id号,也就是账号。第二行是密码。下面两个上到下分别是注册和忘记密码,方框里的是记住账号英雄联盟手游的版本可以通过游戏客户端上方的版本号及官方社交媒体平台上的公告来查看。版本号通常由一串数字和...

gta5手机版免费下正版(gta5手机版免费下正版安卓gwa5)

官方貌似不支持下载游戏因为为正版貌似都是镜像版的希望帮到你正版游戏需要购买正版游戏盘的祝你游戏愉快!什么游戏都可以用修改器修改.不过前提是游戏公司没有限定,如果游戏公司在游戏中已经限定了那一...

pdf阅读器永久免费版(pdf阅读器免费吗)
pdf阅读器永久免费版(pdf阅读器免费吗)

如果仅仅是阅读PDF文档的话。福星PDF阅读器就是永久免费版。美国的Adobereader也是PDF阅读器的永久免费版。PDF是一种专业的文档格式。它具有多种优势。很多专业的文献都通过PDF格式来保存。福星公司是中国优秀的PDF文档阅读...

2026-01-18 14:43 off999

在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
  • 在线文字翻译转换器(文字翻译神器)
yy开播工具手机版(yy开播工具手机版官网)

想要将手机连接到YY开播,首先确保手机和电脑处于同一无线网络下,并且电脑已经安装了YY开播软件。在手机上下载并安装YY开播助手APP后,打开该应用并登录自己的YY账号。然后,在YY开播助手APP中选择...

迅游加速器国际版(迅游加速器国际版要钱么)

迅游不能下载海外游戏的原因是因为一些海外游戏需要进行版权验证,而迅游没有获得这些游戏的版权许可。此外,由于不同国家的游戏法规和政策不同,迅游有时需要根据不同的规定进行调整,这也可能会限制用户下载一些海...

起名网官方网(起名字官网)

https://mqm.d1xz.net/取名网专业从事品牌设计、起名服务,风水咨询、等为一体的专业网站,主要包括宝宝取名、公司名称,产品名称,以及在商品、服务及企业推广宣传过程中涉及到的各种名称和语...

腾讯安全中心网址是什么(腾讯安全中心网址是啥)
腾讯安全中心网址是什么(腾讯安全中心网址是啥)

  进入QQ安全中心主要有三种方法:  一、有QQ密码登陆QQ后进入:  登陆QQ,点击QQ窗口右下角的图标,然后在出现的菜单中,选择“安全”——“安全中心首页”,(如下图);即可进入QQ安全中心页面了。  二、无QQ密码登陆界面进入:...

2026-01-18 13:15 off999

金山毒霸安卓手机版(金山毒霸官方正版手机版)

金山毒霸内核用的是瑞星的内核,瑞星用的是卡巴斯基的内核,性能继承了卡巴斯基的特性,占用内存和CPU都很大,但是杀毒效果还算可以,最不能容忍的就是金山毒霸不是24小时的,就上班的时候可以解决问题,其他时...

qq2011下载(qq2011下载手机版下载)

2011款的奇瑞QQ3低配车型行驶6万公里,个人认为车子车况大体可以,手续齐全的话二手车价位大体在七千左右,具体需要看实际车况。之前官方下载手机QQ的方法有两种:1.手机访问mq.3g.qq.co...

下载拼多多免费下载安装(免费下载拼拼)

拼多多下载需要用户使用手机或平板电脑,并且需要有稳定的网络连接。用户需要保证使用的手机或平板电脑系统版本符合拼多多应用的最低版本要求,同时还需要在手机设置中开启“安装未知来源应用程序”的选项。此外,用...

取消回复欢迎 发表评论: