Bytes和Str的区别

在Python3中,字符序列有两种类型:bytesstrbytes类型是无符号的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 bytesprint('python' == b'python')
# False

上述示例中str类型和bytes类型间使用=来比较是否相等不会报错,但是会返回False。

Bytes与Str间的转换

str类型和bytes类型间可以相互转换。
strbytes的转换需要调用encode()方法。
bytesstr间的转换需要调用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)
# 涓栫晫浣犲ソ

Python系列(五):bytes和str的区别与联系相关推荐

  1. Python高能小技巧:了解bytes与str的区别

    导读:Python有两种类型可以表示字符序列:一种是bytes,另一种是str. 作者:布雷特·斯拉特金(Brett Slatkin) 来源:大数据DT(ID:hzdashuju) bytes实例包含 ...

  2. Python 了解 bytes 与 str 的区别

    Python 有两种类型可以表示字符序列 bytes:实例包含的是原始数据,即 8 位的无符号值(通常按照 ASCII 编码标准来显示) str:实例包含的是 Unicode 码点(code poin ...

  3. [CentOS Python系列] 五.阿里云部署web环境及通过IP地址访问服务器网页

    假设我们服务器CentOS系统已经部署好了,现在我们需要向服务器上传一个HTML主页,通过IP地址展示我们的内容,如何实现呢?本篇文章主要介绍讲述部署阿里云服务器web环境,并通过IP地址访问网页的过 ...

  4. Python中的bytes,str,int等类型转换

    在Python3.2中添加了int.from_bytes(bytes, byteorder, *, signed=False) 可实现不固定长度的bytes类型数据转int类型数据 1 >> ...

  5. python里load什么意思_【python】json中load和loads区别

    相同点 dump 和 dumps 都实现了序列化 load 和 loads 都实现反序列化 变量从内存中变成可存储或传输的过程称之为序列化 序列化是将对象状态转化为可保存或可传输格式的过程. 变量内容 ...

  6. [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境,并通过IP地址访问网页的过程.写代码过程中往往第一步需要解决的就是配置开发环境,对于新手来说,这是非常头疼的事情,而当配置好之后或者对于老手来 ...

  7. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  8. Python中bytes和str区别详细介绍

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

  9. python3字符编码str_聊聊Python 3 的字符串:str 和 bytes 的区别

    Python2的字符串有两种:str 和 unicode,Python3的字符串也有两种:str 和 bytes.Python2 的 str 相当于 Python3 的bytes,而unicode相当 ...

最新文章

  1. T2821 天使之城 codevs
  2. Vim 高亮显示单词并查找
  3. robotframework如何设计web页面的自动化---启动robotframework ride
  4. Windows Server 2012 R2 虚拟机迁移 出错 21502 0x80070490 解决
  5. abp+dapper+mysql_ABP公共结构 – 时间与时区设置 - ABP 中文文档
  6. GDAL库中WFS服务中含有中文不能获取数据的问题
  7. UML类图几种关系的总结,泛化 = 实现 组合 聚合 关联 依赖
  8. 用户标签照妖镜api、旺旺搜索搜索标签api、用户标签查询api、淘宝用户标签透视透视api
  9. dspic c语言教程,轻松学PIC之数码管篇 PIC单片机学习系列教程
  10. 杰理之如果再开蓝牙一拖二的话。手机连接样机时,会出现,无法连接【篇】
  11. Thoughts On To The Moon
  12. 机器人算法工程师入门指南(三)机器人算法工程师需要学习哪些知识?(及教材推荐)
  13. Node后端模板代码(附源码)
  14. HTML5设计更具有交互性的标签方法(含智能辅助设备使用的HTML5,翻译资料)
  15. 05 爬虫应用(2)——抓取昵图性感美女图片(针对传统翻页图片版本)
  16. 字节跳动一道Python面试题
  17. 【JavaWeb】一文学会JPA
  18. 202011 网络是通的,数据发不过去(接受不到)
  19. python按时间截取视频,python使用opencv按一定间隔截取视频帧
  20. 快手坐拥3亿用户,想成为平行世界里的Snapchat,然后呢

热门文章

  1. 解决java编译错误( 程序包javax.servlet不存在javax.servlet.*)
  2. 2020除了宝塔面板还有哪些好用的服务器管理软件?
  3. 谷歌的Gson存储的时间转fastjson时报错JSONException: For input string: Jan 1, 1994 12:00:00 AM
  4. Unreal Engin_画廊制作笔记 _007Fog处理,雾的设置
  5. 基于阿里云的基础架构设施保障(二)IAAS云存储
  6. Matplotlib饼图注释
  7. Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]
  8. 超市管理系统用例建模
  9. 计算机中班音乐,【精品】中班音乐教案6篇
  10. 大数据助力创建数字化智慧城市解决方案