关于bytes和bytearray
背景
- 平时工作因为有批量线上数据进行更新,通过Python程序连接数据库,利用连接池和gevent的并发性能,处理大量数据。
 - 因为数据方提供的数据表结构中带有varbinary类型字段,并非全部,所以在使用Python程序时,导致报错
TypeError: Object of type ‘bytes’ is not JSON serializable
 
经过多方查证了解到关于Python中bytes和bytearray两种类型区别
1. 关于bytearray类型的用法
- bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
 
bytearray()
bytearray(整数n)
bytearray(整型可迭代对象) #可迭代tuple list 整型
bytearray(b'字符串')
bytearray(字符串, encoding='utf-8') # 必须指定编码格式
2. bytearray常用方法
| 方法 | 说明 | 
|---|---|
| ba | 代表字节数组 | 
| ba.clear() | 清空 | 
| ba.append(n) | 追加一个字节(n为0~255的整数) | 
| ba.remove(value) | 删除第一个出现的字节,如果没有则产生 | 
| ValueError | 错误 | 
| ba.reverse() | 字节顺序进行反转 | 
| ba.decode(encoding=’utf-8’) | 转为字符串 | 
| ba.find(sub[, start[,end]]) | 查找子字节串 | 
3 bytes、bytearray与str之间的区别
bytes是byte的序列,而str是unicode的序列。
str 使用encode方法转化为 bytes
bytes通过decode转化为str
str转换成bytes:
字节串bytes、字节数组bytearray是二进制数据组成的序列,其中每个元素由8bit二进制(同1byte,同2位16进制数,同0~255)组成。
字节数计算机的语言,字符串是人类的语言,他们之间通过编码表形成一一对应关系。
最小的 ASCII 编码表只需要一位字节,且只占用了其中 [31,127] 的码位;
str 存储unicodel 6字符(0~65535)
bytes/bytearry = str.encode(encoding="utf-8")
str = bytes/bytearray.decode(encoding="utf-8")
- encode:编码,decode:解码
 
4. 在网上找到一种处理json数据为bytearray的方法
import scipy.io as sio
import os
import json
import numpy as np
load_fn = '2%.mat'
load_data = sio.loadmat(load_fn)
print(load_data.keys())
class MyEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, np.ndarray):
            return obj.tolist()
        elif isinstance(obj, bytes):
            return str(obj, encoding='utf-8');
        return json.JSONEncoder.default(self, obj)
save_fn = os.path.splitext(load_fn)[0] + '.json'
file = open(save_fn,'w',encoding='utf-8');
file.write(json.dumps(load_data,cls=MyEncoder,indent=4))
file.close()
该方法适用于整个json为bytearray类型时使用,利用instance和numpy中的nd.array类型来判断对象类型,自定义修改json.dumps的继承类,来进行转换
关于bytes和bytearray的更多相关文章
- python bytes和bytearray、编码和解码
		
str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...
 - python中读取json文件报错,TypeError:the Json object must be str, bytes or bytearray,not ‘TextIOWrapper’
		
利用python中的json读取json文件时,因为错误使用了相应的方法导致报错:TypeError:the Json object must be str, bytes or bytearray,n ...
 - Python的程序结构[2] -> 类/Class[5] -> 内建类 bytes 和 bytearray
		
内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class byte ...
 - python string类型 bytes类型 bytearray类型
		
一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode的序列. ...
 - bytes和bytearray总结
		
The core built-in types for manipulating binary data are bytes and bytearray. They are supported by ...
 - bytes和bytearray
		
bytes bytes是Python 3中特有的,Python 2 里不区分bytes和str. Python 2中 >>> type(b'xxxxx') <type 'str ...
 - Python字节数组【bytes/bytearray】
		
bytes >>> type(b'xxxxx') <class 'bytes'> >>> type('xxxxx') <class 'str'&g ...
 - bytes,bytearray
		
1.bytes.bytearray ---Python3 引入的! bytes:不可变字节序列,bytearray:字节属组,可变 都是连续的空间. 2.字符串与bytes 字符串是字符组成的有序的序 ...
 - 【Python】【内置函数】【bytes&bytearray&str&array】
		
[bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...
 
随机推荐
- PHP一些常用的正则表达式分享给大家
			
一.校验数字的表达式 1 数字:^[0-9]*$2 n位的数字:^\d{n}$3 至少n位的数字:^\d{n,}$4 m-n位的数字:^\d{m,n}$5 零和非零开头的数字:^(0|[1-9][0- ...
 - 策略模式 Strategy 政策Policy 行为型 设计模式(二十五)
			
策略模式 Strategy 与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会 ...
 - Dynamics 365-为什么查到的Record的Id是Guid初始值
			
通过代码查询CRM数据,这个是开发经常会碰到的情况,获取返回的EntityCollection之后,我们会拿Entity.Id做进一步操作.笔者最近碰到的情况,是Entity.Id是个初始值.先上一段 ...
 - 工具资源系列之给虚拟机装个centos
			
前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 centos 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参 ...
 - SQL ----post漏洞测试注入
			
使用工具sqlmap 输入账号密码进行bp截断,获取文本保存在sqlmap下面2.txt 爆数据库 爆表爆表 爆数据 最后把数据密码md5解析
 - vue(9)—— 组件化开发 - webpack(3)
			
前面两个终于把webpack相关配置解析完了.现在终于进入vue的开发了 vue组件化开发预热 前期准备 创建如下项目: app.js: footer.js: main.js: webpack.con ...
 - Postgres 优雅存储树形数据
			
碰到一个树形数据需要存储再数据控制,碰到以下两个问题: 在PG数据库中如何表达树形数据 如何有效率的查询以任意节点为Root的子树 测试数据 为了更加简单一些,我们将使用一下数据 Section A ...
 - ASP.NET MVC 下自定义 ModelState 扩展类,响应给 AJAX
			
ModelStateExtensions.cs using System.Collections.Generic; using System.Linq; using System.Web.Mvc; n ...
 - ngxin 配置ssl
			
1.上aliyun.com 申请免费ssl证书, 登录aliyun后搜索 “ca证书” , 申请使用“文件验证”,把文件传到服务器指定目录上,验证即可. 2.然后下载证书, 解压后传到服务器上, 在n ...
 - 洛谷-p4555
			
题意:给你一个串,问你以i结尾的回文串加上以i+1开头的回文串的最大长度 解题思路:回文自动机板子题,记录下每次正着添加字符的时候,当前字符能够到达的最大回文子串的长度和倒着添加字符的时候,能够到达的 ...