Python字节串类型bytes及用法

一、bytes 字节串类型概述

Python 3 新增了 bytes 类型,用于代表字节串,是一个类型,不是C#中的列表。

由于 bytes 保存的就是原始的字节(二进制格式)数据,因此 bytes 对象可用于在网络上传输数据,也可用于存储各种二进制格式的文件,比如图片、音乐等文件。

1、字节串与字符串之间的区别

bytes 和 str 除操作的数据单元不同之外,它们支持的所有方法都基本相同,bytes 也是不可变序列。

  • 字符串(str)由多个字符组成,以字符为单位进行操作;
  • 字节串(bytes)由多个字节组成,以字节为单位进行操作。

2、字节概述

计算机底层有两个基本概念:位(bit)和字节(Byte),其中

  • bit 代表 1 位,要么是 0,要么是 1;
  • Byte 代表 1 字节,1 字节包含 8 位。

在字节串中每个数据单元都是字节,也就是 8 位,其中每 4 位(相当于 4 位二进制数,最小值为 0 ,最大值为 15)可以用一个十六进制数来表示,因此每字节需要两个十六进制数表示,

b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b',
# 比如 :\xe6 就表示 1 字节,其中 \x 表示十六进制,e6 就是两位的十六进制数。

Unicode 字符集,包括汉字,为两个字节(16 位,支持 65536 个字符编号)。实际使用的 UTF-8, UTF-16 等其实都属于 Unicode 字符集。

二、字节串与字符串之间的转换

bytes 对象只负责以字节(二进制格式)序列来记录数据,至于这些数据到底表示什么内容,完全由程序决定。如果采用合适的字符集,字符串可以转换成字节串;反过来,字节串也可以恢复成对应的字符串。

1、将一个字符串转换成 bytes 对象

如果希望将一个字符串转换成 bytes 对象,有如下三种方式:

下面程序中 b1~b5 都是字节串对象,该程序示范了以不同方式来构建字节串对象。其中 b2、b3 都是直接在 ASCII 字符串前添加b前缀来得到字节串的:b4 调用 bytes() 函数来构建字节串;而 b5 则调用字符串的 encode 方法来构建字节串。

  • 如果字符串内容都是 ASCII 字符,则可以通过直接在字符串之前添加 b 来构建字节串值。
# 创建一个空的bytes
b1 = bytes()
# 创建一个空的bytes值
b2 = b''
# 1、通过b前缀指定hello是bytes类型的值
b3 = b'hello'
print(b3)
print(b3[0])
print(b3[2:4])

#b'hello'
#104
#b'll'
  • 调用 bytes() 函数(其实是 bytes 的构造方法)将字符串按指定字符集转换成字节串,
    如果不指定字符集,默认使用 UTF-8 字符集。
# 调用bytes方法将字符串转成bytes对象
b4 = bytes('我爱Python编程',encoding='utf-8')
print(b4)
#b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'
  • 调用字符串本身的encode() 方法将字符串按指定字符集转换成字节串(常用)
    如果不指定字符集,默认使用 UTF-8 字符集。
# 利用字符串的encode()方法编码成bytes,默认使用utf-8字符集
b5 = "学习Python很有趣".encode('utf-8')
print(b5)
#b'\xe5\xad\xa6\xe4\xb9\xa0Python\xe5\xbe\x88\xe6\x9c\x89\xe8\xb6\xa3'

从上面的输出结果可以看出,字节串和字符串非常相似,只是字节串里的每个数据单元都是 1 字节。

2、decode():将一个bytes 对象转换成字符串

如果程序获得了 bytes 对象,也可调用 bytes 对象的 decode() 方法将其解码成字符串,

#将bytes 对象解码成字符串,默认使用UTF-8进行解码
st = b5.decode('utf-8')
print(st)#学习Python很有趣

到此这篇关于Python字节串类型bytes及用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python3中的bytes类型和str类型

    目录 前言: 编码发展的历史 bytes和str之间的异同 前言: Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然). 下面让我们深入分析一下二者的区别和联系. 编码发展的历史 在谈bytes和str之前,需要先说说关于编码

  • python中bytes和str类型的区别

    经过一上午的查找资料.大概理清楚了bytes类型和str类型的区别. bytes类型和str类型在呈现形式有相同之处,如果你print一个bytes类型的变量,会打印一个用b开头,用单引号括起来的序列.比如: >>> c = b'\x80abc' >>> type(c) bytes 我们看到c = b'\x80abc'表示的就是一个bytes类型.是不是和字符串很像?只是前面多出来一个b.那b'\x80abc的含义是什么呢?\x80即16进制的两位数,代表十进制的0-2

  • python数据类型bytes 和 bytearray的使用与区别

    目录 bytes 和 bytearray 理解bytes 和 bytearray python中值的表示 进制转换 bytes类型 bytes类型转化 bytes转数值 bytes的方法 bytearray bytearray的方法 bytes 和 bytearray bytes 和 bytearray 都是二进制世界的成员,用二进制的方式去理解才能看清他的本质. 理解bytes 和 bytearray 0 和 1 是计算机工作的根本,单个的0和1只能表达两种状态,无法满足我们复杂的计算,于是计

  • Python3中的bytes和str类型详解

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然). 下面让我们深入分析一下二者的区别和联系. 编码发展的历史 在谈bytes和str之前,需要先说说关于编码是如何发展的.. 在计算机历史的早期,美国为代表的英语系国家主导了整

  • Python内建类型bytes深入理解

    目录 引言 1 bytes和str之间的关系 2 bytes对象的结构:PyBytesObject 3 bytes对象的行为 3.1 PyBytes_Type 3.2 bytes_as_sequence 4 字符缓冲池 引言 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 在我们日常的开发中,str是很常用的一个内建类型,与之相关的我们比较少接触的就是bytes,这里先为大家介绍一下bytes相关的知识点,下一篇博客再详细介绍str的相关内容

  • 对python的bytes类型数据split分割切片方法

    对str类型数据进行split操作如下: >>> s = 'abc\ndef' >>> s.split('\n') ['abc', 'def'] 对bytes类型数据进行split操作如下: >>> b = b'abc\ndef' >>> b.split(b'\n') [b'abc', b'def'] 测试Python版本:3.6.5 以上这篇对python的bytes类型数据split分割切片方法就是小编分享给大家的全部内容了,希望

  • Python中的bytes类型用法及实例分享

    目录 1.bytes定义 2.bytes方法 3.使用不同方式创建bytes对象 前言; Python bytes 类型用来表示一个字节串.“字节串“不是编程术语,是我自己“捏造”的一个词,用来和字符串相呼应.bytes 是 Python 3.x 新增的类型,在 Python 2.x 中是不存在的. 字节串(bytes)和字符串(string)的对比: 字符串由若干个字符组成,以字符为单位进行操作:字节串由若干个字节组成,以字节为单位进行操作. 字节串和字符串除了操作的数据单元不同之外,它们支持

  • Python3中bytes类型转换为str类型

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然). 问题背景 基于URL解析报文的时候,URL链接出现str类型+bytes类型是报错TypeError,如何解决这个问题呢? 解决方案 方法一:利用str函数 方法二:利用b

  • 简单了解Python3 bytes和str类型的区别和联系

    这篇文章主要介绍了简单了解Python3 bytes和str类型的区别和联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和bytes,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)

  • Python字节串类型bytes及用法

    一.bytes 字节串类型概述 Python 3 新增了 bytes 类型,用于代表字节串,是一个类型,不是C#中的列表. 由于 bytes 保存的就是原始的字节(二进制格式)数据,因此 bytes 对象可用于在网络上传输数据,也可用于存储各种二进制格式的文件,比如图片.音乐等文件. 1.字节串与字符串之间的区别 bytes 和 str 除操作的数据单元不同之外,它们支持的所有方法都基本相同,bytes 也是不可变序列. 字符串(str)由多个字符组成,以字符为单位进行操作: 字节串(bytes

  • Python内建类型str源码学习

    目录 引言 1 Unicode 2 Python中的Unicode 2.1 Unicode对象的好处 2.2 Python对Unicode的优化 3 Unicode对象的底层结构体 3.1 PyASCIIObject 3.2 PyCompactUnicodeObject 3.3 PyUnicodeObject 3.4 示例 4 interned机制 5 总结 引言 “深入认识Python内建类型”这部分的内容会从源码角度为大家介绍Python中各种常用的内建类型. 在介绍常用类型str之前,在上

  • Python中bytes字节串和string字符串之间的转换方法

    目录 背景 代码 代码说明: 验证一下 附:bytes和string区别 总结 背景 在工作中经常会碰到字节串(bytes)与字符串(string)之间转换的问题,做个记录. bytes只负责用字节序列的形式(二进制形式)存储数据,不关心数据本身是图片.文字.视频等等.如果需要使用并且展示的话,按照对应的解析规则处理,就可以拿到对应类型的数据.如常见的字符串类型,只需要使用对应的字符编码格式,就可以拿到字符串的内容. 下面会用一些代码来表示bytes的构造,以及和字符串之间的转换. 代码 先看一

  • 详解python string类型 bytes类型 bytearray类型

    一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode的序列. str类型: >>> s = u'你好' >>> s '你好' >>> type(s) <class 'str'> bytes类型: >>> b = b'abc' >>> b b'abc' >>&

  • Python3之字节串bytes与字节数组bytearray的使用详解

    字节串bytes 字节串也叫字节序列,是不可变的序列,存储以字节为单位的数据 字节串表示方法: b"ABCD" b"\x41\x42" ... 字节串的构造函数: bytes() 创建一个空的字节串 ,同b"" bytes(整数可迭代对象) 用可迭代对象创建一个字节串 bytes(整数n) 生成n个值为0的字节串 bytes(字符串,encoding='utf-8') 转码 字节串的运算:同其他序列的运算 +.+=.*.*= <.<=

  • Python标准库之typing的用法(类型标注)

    PEP 3107引入了功能注释的语法,PEP 484 加入了类型检查 标准库 typing 为类型提示指定的运行时提供支持. 示例: def f(a: str, b:int) -> str: return a * b 如果实参不是预期的类型: 但是,Python运行时不强制执行函数和变量类型注释.使用类型检查器,IDE,lint等才能帮助代码进行强制类型检查. 使用NewType 创建类型 NewType() 是一个辅助函数,用于向类型检查器指示不同的类型,在运行时,它返回一个函数,该函数返回其

  • 详解python字节码

    Python对不可变序列进行重复拼接操作效率会很低,因为每次都会生成一个新的对象,解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素. 但是CPython对字符串操作进行了优化,因为对字符串做+=操作实在是太普遍了.因此,初始化str时会预留出额外的可扩展空间,从而进行增量操作的时候不会有复制再追加的这个步骤. 通过字节码研究一下这个过程. >>> s_code = 'a += "b"' >>> c = compile(s_code,

  • 基于Python的文件类型和字符串详解

    1. Python的文件类型 1. 源代码--直接由Python解析 vi 1.py #!/usr/bin/python print 'hello world' 这里的1.py就是源代码 执行方式和shell脚本类似: chmod +x 后,./1.py Python 1.py 2. 字节代码 Python源码文件经编译后生成的扩展名为pyc的文件 编译方法: [root@t1 py]# cat 2.py #!/usr/bin/python import py_compile py_compil

  • python threading和multiprocessing模块基本用法实例分析

    本文实例讲述了python threading和multiprocessing模块基本用法.分享给大家供大家参考,具体如下: 前言 这两天为了做一个小项目,研究了一下python的并发编程,所谓并发无非多线程和多进程,最初找到的是threading模块,因为印象中线程"轻量...","切换快...","可共享进程资源..."等等,但是没想到这里水很深,进而找到了更好的替代品multiprocessing模块.下面会讲一些使用中的经验. 后面出现的

随机推荐