Python中bytes和str的区别与联系详解
作者:斯曦巍峨 发布时间:2022-04-18 18:36:57
标签:python,bytes,str
Bytes和Str的区别
在Python3中,字符序列有两种类型:bytes和str。bytes类型是无符号的8位值(通常以ASCII码显式),而str类型是Unicode代码点(code point)。代码点指编码字符集中,字符所对应的数字。
a = b'hello world'
print(isinstance(a, bytes))
print(list(a))
print(a)
"""
True
[104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
b'hello world'
"""
a = 'hello world'
print(isinstance(a, str))
print(list(a))
print(a)
"""
True
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
hello world
"""
isinstance()方法可以判断对象的类型,例如这里用来判断是str还是bytes。
Python3对文本(str)和二进制数据(bytes)有着严格的区分,不能混用。
x = b'python'
y = b'java'
z = 'c++'
w = 'c'
print(x + y)
# b'pythonjava'
print(z + w)
# c++c
print(x + z)
# TypeError: can't concat str to bytes
print('python' == b'python')
# False
上述示例中str类型和bytes类型间使用=来比较是否相等不会报错,但是会返回False。
Bytes与Str间的转换
str类型和bytes类型间可以相互转换。
str到bytes的转换需要调用encode()方法。
bytes到str间的转换需要调用decode()方法。
x = b'python'
y = x.decode(encoding='utf-8')
z = y.encode(encoding='utf-8')
print(y)
print(z)
"""
python
b'python'
"""
可以观察到encode()和decode()方法都有一个encoding参数用来指定具体的编码规则。
读写文件的注意事项
当要将bytes类型写入到文件中时,必须指定mode=wb。读取二进制文件时可以指定mode=rb或者指定编码方式,使用后者时读出来的就不是bytes类型的字符序列了。
x = b'python'
# 错误示例
with open('data.bin', mode='w') as fp:
fp.write(x)
# TypeError: write() argument must be str, not bytes
# 正确示例
with open('data.bin', mode='wb') as fp:
fp.write(x)
# 读取二进制文件方式1
with open('data.bin', mode='rb') as fp:
content = fp.read()
print(content)
# python
# 读取二进制文件方式2
with open('data.bin', mode='r', encoding='utf-8') as fp:
content = fp.read()
print(content, type(content))
# python <class 'str'>
当读写Unicode数据时,只需要注意下编码方式即可,最好是显式的传递encoding参数。
x = '世界你好'
with open('data.txt', mode='w', encoding='utf-8') as fp:
fp.write(x)
with open('data.txt', mode='r', encoding='utf-8') as fp:
content = fp.read()
print(content)
# 世界你好
# 错误示例,编码方式不对
with open('data.txt', mode='r', encoding='gbk') as fp:
content = fp.read()
print(content)
# 涓栫晫浣犲ソ
来源:https://blog.csdn.net/qq_42103091/article/details/124573589


猜你喜欢
- 周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖。我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实
- Vue实现文本编译详情模板编译在数据劫持中,我们完成了Vue中data选项中数据的初始操作。这之后需要将html字符串编译为render函数
- 前言return语句用于退出函数,向调用方返回一个表达式。return在不带参数的情况下(或者没有写return语句),默认返回None。N
- 内容摘要:近年来,视频点播VOD(Video on Demand)的名字在媒体上出现得越来越多。VOD技术使人们可以根据
- 本文讲述了python安装mysql-python的方法。分享给大家供大家参考,具体如下:ubuntu 系统下进行的操作首先安装了pip工具
- 本文实例讲述了python编程开发之textwrap文本样式处理技巧。分享给大家供大家参考,具体如下:在看python的API的时候,发现p
- 由于项目需要,最近在用基于Python语言的一个后端框架Django开发web应用。不得不说,Django继承了Python的简洁性,用它来
- 一、程序运行1.效果展示 - 轮廓描绘看轮廓描绘效果:2.效果展示 - 颜色填充衣服和裤子颜色填充效果:二、实现过程1.绘图数据下载获取地址
- springboot配置文件抽离,便于服务器读取对应配置文件,避免项目频繁更改配置文件,影响项目的调试与发布1.创建统一配置中心项目coni
- 禁止鼠标右键:$(document).ready(function(){ $(document).bind("contextmen
- 前言在日常的业务数据分析 ,可视化是非常重要的步骤。这里总结了matplotlib常用绘图技巧,希望可以帮助大家更加更加高效的、美观的显示图
- 在运营或者对各种 SDK 或者 API 进行调试的时候,邮件功能基本上都会被使用到。在测试的时候,可能很多人都会使用 SMTP 或者自己的邮
- 记录训练过程history=model.fit(X_train, Y_train, epochs=epochs,batch_size=bat
- 在你自己安装了一个新的MySQL服务器后,你需要为MySQL的root用户指定一个目录(缺省无口令),否则如果你忘记这点,你将你的MySQL
- Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。 * 圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞
- 本文实例讲述了Python3实现获取图片文字里中文的方法。分享给大家供大家参考,具体如下:一、运行环境(1) win10(2) pychar
- 前言:K8s也提供API接口,提供这个接口的是管理节点的apiserver组件,apiserver服务负责提供HTTP API,以便用户、其
- 前言一个Excel电子表格文档称为一个工作簿一个工作簿保存在一个扩展名为.xlsx的文件中一个工作簿可以包含多个表用户当前查看的
- mysql json解析函数JSON_EXTRACTMYSQl自带的解析函数JSON_EXTRACT,用JSON_EXTRACT函数解析出来
- 前言SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是: