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

yizhihongxing

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 pacakges 的 github 项目 [关闭]

    【问题标题】:Looking for all github projects that use a python pacakges [closed]寻找所有使用 python pacakges 的 github 项目 [关闭] 【发布时间】:2023-04-02 22:09:01 【问题描述】: 我正在寻找一个工具、脚本、站点或其他任何东西,它可以向我显示利…

    Python开发 2023年4月8日
    00
  • 详解python 破解网站反爬虫的两种简单方法

    详解python 破解网站反爬虫的两种简单方法 简介 在爬取网站数据的过程中,经常会遇到网站反爬虫的情况,例如:IP封禁、UA检测、验证码等。本文将讨论两种简单的python破解网站反爬虫的方法。 方法一:伪装UA 部分网站反爬虫机制是检测爬虫的User-Agent,所以我们可以用伪装的方式进行欺骗。 示例代码: import requests url = …

    python 2023年5月14日
    00
  • Python Subprocess模块原理及实例

    Python Subprocess模块原理及实例 Subprocess模块是Python中用于创建子进程的标准库。子进程的创建通常是为了调用操作系统提供的命令行工具或执行其他可执行文件。该模块提供了许多函数,可以帮助我们创建子进程并与它们进行交互,同时还可以控制子进程的输入和输出等操作。 Subprocess基本用法 创建子进程 Subprocess模块的主…

    python 2023年6月2日
    00
  • Python 安装第三方库 pip install 安装慢安装不上的解决办法

    下面是针对“Python安装第三方库pip install安装慢安装不上的解决办法”的完整攻略: 1. 安装pip 在使用pip安装第三方库之前,我们需要先安装pip。如果你已经安装了Python3.4及以上版本,pip应该已经自带了。可以在终端输入以下命令,检查是否有pip的版本: pip –version 如果没有安装pip,可以通过以下命令安装: c…

    python 2023年5月14日
    00
  • Python工程师面试必备25条知识点

    作为Python工程师,准备面试非常重要。以下是25条Python工程师面试必备知识点的详细攻略: 1. Python基础知识 在面试中,你需要展示你对Python的基础知识掌握情况。这包括变量、数据类型、控制流和函数等主题。 2. Python包管理器 Python包管理器可以帮助你轻松安装和维护Python工具和库。最流行的包管理器是pip,你需要了解如…

    python 2023年5月14日
    00
  • python监控文件并且发送告警邮件

    请参考以下的完整攻略: Python监控文件并发送告警邮件 概述 本文将介绍如何使用Python编写一个可以监控特定文件夹内文件变化并且在出现变化时发送告警邮件的脚本。 前置条件 在开始操作之前,你需要拥有以下环境: Python3环境 一个可用的邮件账号和SMTP服务器地址 实现步骤 导入所需要的库 我们需要导入os,time,和smtplib库 impo…

    python 2023年5月13日
    00
  • Python操作excel的方法总结(xlrd、xlwt、openpyxl)

    下面是一个详细讲解Python操作Excel的三种方法的教程。 Python操作Excel的方法总结(xlrd、xlwt、openpyxl) 介绍 Python是一种功能强大的编程语言,在处理和操作Excel文件时非常常用。本文将介绍三种主要的Python操作Excel的方法:xlrd、xlwt和openpyxl。 xlrd:用于读取.xls格式的Excel…

    python 2023年5月13日
    00
  • 如何使用Python查询某个列中的最大值?

    以下是如何使用Python查询某个列中的最大值的完整使用攻略。 步骤1:导入模块 在Python中,我们需要导入相应的模块来连接数据库和执行查询操作。以下是导入mysql-connector-python模块的基本语法: import mysql.connector 以下是导入psycopg2模块的基本语法: import psycopg2 步骤2:连接数据…

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