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

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

在Python3中,字节串(bytes)和字节数组(bytearray)是存储字节序列的两种方式。在本文中,我们将会详细讲解字节串和字节数组的使用,以及它们在Python编程中的用处。

字节串(bytes)

字节串(bytes)是一种用来存储字节序列(byte sequence)的不可变的数据类型。在Python3中,字节串可以通过以下方式创建:

b = b'hello world'

上述代码创建了一个字节串变量b,该变量存储"hello world"字符串的字节序列。请注意,字节串必须使用b前缀来加以区分。

接下来,让我们看看如何访问字节串的单个字节。可以通过类似列表(list)的方式来访问字节串中的元素,如下所示:

print(b[0])   # 104
print(b[1])   # 101
print(b[2])   # 108

上述代码将会依次输出字节串中第一个、第二个、第三个字节的ASCII码值,也就是'h'、'e'、'l'。

在Python3中,字节串也支持切片(slicing)操作。例如,我们可以使用以下代码来获取'h'和'e'所对应的字节:

print(b[:2])   # b'he'

另外,如果我们需要将一个字符串转换为字节串,可以使用以下代码:

s = "hello world"
b = s.encode()

上述代码将会创建一个新的字节串变量b,该变量包含了字符串s的字节表示。默认情况下,Python3使用UTF-8编码来将字符串转换为字节串。

字节数组(bytearray)

字节数组(bytearray)是一种用来存储字节序列的可变的数据类型。它与字节串类似,但是允许我们修改其中的元素。在Python3中,字节数组可以通过以下方式创建:

barr = bytearray(b'hello world')

上述代码创建了一个字节数组变量barr,该变量存储了"hello world"字符串的字节序列。请注意,我们在创建字节数组时需要先将字节串转换为字节数组。

接下来,让我们看看如何修改字节数组中的元素。与列表类似,我们可以使用索引和赋值操作来修改字节数组中的元素。例如,以下代码将会把字节数组中的第一个字节设为'A':

barr[0] = ord('A')

请注意,上述代码中,我们使用了ord函数来获取字母'A'的ASCII码值。

在Python3中,字节数组也支持切片操作。为了演示该操作,我们可以使用以下代码来将字节数组中的前两个字节替换为'b1'和'b2':

barr[:2] = b'b1b2'

示例说明

示例一:计算SHA256哈希值

让我们用一个示例来说明字节串和字节数组的用处。假设我们需要计算一个字符串的SHA256哈希值。我们可以使用Python3内置的hashlib库来完成此任务。然而,该库仅支持字节串作为输入。因此,我们需要将字符串转换为字节串,如下所示:

import hashlib

s = "hello world"
b = s.encode()

m = hashlib.sha256()
m.update(b)
print(m.hexdigest())

上述代码将会输出字符串"hello world"的SHA256哈希值。

示例二:修改JPEG图像的宽度和高度

字节数组也可以用于图像处理。假设我们需要将一张JPEG图像的宽度和高度各缩小一半。我们可以使用Python3内置的Pillow库来读取和修改JPEG图像。以下是修改一张名为"cat.jpg"的JPEG图像的宽度和高度的示例代码:

from PIL import Image

with open('cat.jpg', 'rb') as f:
    barr = bytearray(f.read())

im = Image.open(f)
width, height = im.size

new_width, new_height = width // 2, height // 2

# 修改JPEG文件头
barr[3] = 0xC0  # SOF0的标识符
barr[5:7] = new_height.to_bytes(2, byteorder='big')
barr[7:9] = new_width.to_bytes(2, byteorder='big')

with open('cat_small.jpg', 'wb') as f:
    f.write(barr)

上述代码将会读取名为"cat.jpg"的JPEG图像,并把它的宽度和高度各缩小一半。最后,代码将会把修改后的图像存储为"cat_small.jpg"。

总结

在Python3的编程中,字节串和字节数组的使用是非常普遍的。字节串可以用于数据的编码和解码,而字节数组则可以用于数据的处理和修改。在本文中,我们详细讲解了字节串和字节数组的使用,并且提供了示例代码来帮助读者更好地理解。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3之字节串bytes与字节数组bytearray的使用详解 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • python实现断点调试的方法

    下面我会详细讲解python实现断点调试方法的完整攻略。 什么是断点调试 在编写程序时,我们常常需要查看程序的执行情况,以便找出代码的错误。调试是一个解决这个问题的方法。其中一种调试方法是断点调试。 断点调试是指程序在执行到设定的断点时会停止,我们可以在停止状态下进行各种调试操作,比如查看变量的值,单步执行程序,等等。 如何在Python中实现断点调试 在P…

    python 2023年6月5日
    00
  • Python实现LRU算法的2种方法

    Python实现LRU算法的2种方法 LRU算法是一种常见的缓存淘汰策略,它可以用于实现缓存系统。在本文中,我们将讲解Python实现LRU算法的2种方法,包括使用Python标准库的collections模块和手实现LRU算法。同时,我们还将提供两个示例说明,以帮助读者更好地理解LRU法的使用方法。 方法1:使用collections模块 Python标准…

    python 2023年5月13日
    00
  • Python捕获异常堆栈信息的几种方法(小结)

    Python捕获异常堆栈信息的几种方法(小结) 在Python编程中,异常处理是一个必不可少的环节。当程序出现错误时,Python会自动抛出异常,如果不加处理,程序就会直接终止运行。为了更好地排查错误,我们需要捕获异常,并查看出错的具体位置和原因。这篇文章就来介绍一些常用的捕获异常堆栈信息的方法。 1. 使用try-except语句 try-except语句…

    python 2023年5月13日
    00
  • Python matplotlib可视化之绘制韦恩图

    我将为你提供Python matplotlib可视化之绘制韦恩图的完整攻略。 什么是韦恩图 韦恩图是一种用于可视化集合交集的图形,它由两个或多个圆组成,每个圆代表一个集合,两个圆重叠的区域代表两个集合的交集,而每个圆独有部分则代表该集合的差集。韦恩图能够帮助我们直观地理解不同集合之间的关系,并且可以通过它来做一些数据分析的工作。 绘制韦恩图 要绘制韦恩图,我…

    python 2023年5月14日
    00
  • Python中的wordcloud库安装问题及解决方法

    下面我来分享一下“Python中的wordcloud库安装问题及解决方法”的完整攻略。 问题描述 在使用Python中的wordcloud库时,由于各种原因(网络问题、系统环境等)可能会出现无法安装wordcloud库的情况,导致无法使用该库进行词云生成等操作。 解决方法 1. 安装前置依赖 在安装wordcloud库之前,需要先安装一些前置依赖库,如num…

    python 2023年5月20日
    00
  • 单个特征的多个分类值如何使用python将它们转换为二进制

    【问题标题】:Multiple Categorical values for a single feature how to convert them to binary using python单个特征的多个分类值如何使用python将它们转换为二进制 【发布时间】:2023-04-03 21:02:01 【问题描述】: 我有一个包含 28 列的电影数据集…

    Python开发 2023年4月8日
    00
  • python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)

    下面我会给出关于“python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)”的完整攻略,包含以下部分: 准备工作 安装必要的Python库 编写爬虫代码 制作地图 部署到云服务器 定时爬取丁香园的新型冠状病毒数据 其中,2-6部分为攻略的主要内容,下面我将详细讲解每一部分。 1. 准备工作 在开始操作之前,我们需要先…

    python 2023年5月18日
    00
  • Python中异常重试的解决方案详解

    Python中异常重试的解决方案详解 在Python编程中,我们总是会遇到各种各样的异常,比如网络异常、服务器异常等等。为了提高程序的健壮性和稳定性,我们可以采用异常重试的解决方案。本文就来详细讲解Python中异常重试的解决方案。 简介 异常重试的解决方案是在异常出现的时候,不是立即报错,而是进行重试,重复运行出现异常的那部分代码。这可以大大提高程序的健壮…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部