背景

  • 平时工作因为有批量线上数据进行更新,通过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的更多相关文章

  1. python bytes和bytearray、编码和解码

    str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...

  2. 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 ...

  3. Python的程序结构[2] -> 类/Class[5] -> 内建类 bytes 和 bytearray

    内建类 bytes 和 bytearray / Built-in Type bytes and bytearray 关于内建类 Python的内建类 bytes 主要有以下几点: class byte ...

  4. python string类型 bytes类型 bytearray类型

    一.python3对文本和二进制数据做了区分.文本是Unicode编码,str类型,用于显示.二进制类型是bytes类型,用于存储和传输.bytes是byte的序列,而str是unicode的序列. ...

  5. bytes和bytearray总结

    The core built-in types for manipulating binary data are bytes and bytearray. They are supported by ...

  6. bytes和bytearray

    bytes bytes是Python 3中特有的,Python 2 里不区分bytes和str. Python 2中 >>> type(b'xxxxx') <type 'str ...

  7. Python字节数组【bytes/bytearray】

    bytes >>> type(b'xxxxx') <class 'bytes'> >>> type('xxxxx') <class 'str'&g ...

  8. bytes,bytearray

    1.bytes.bytearray ---Python3 引入的! bytes:不可变字节序列,bytearray:字节属组,可变 都是连续的空间. 2.字符串与bytes 字符串是字符组成的有序的序 ...

  9. 【Python】【内置函数】【bytes&bytearray&str&array】

    [bytes] 英文文档: class bytes([source[, encoding[, errors]]]) Return a new “bytes” object, which is an i ...

随机推荐

  1. 关于单链表的增删改查方法的递归实现(JAVA语言实现)

    因为在学习数据结构,准备把java的集合框架底层源码,好好的过一遍,所以先按照自己的想法把单链表的类给写出来了; 写该类的目的: 1.练习递归 2.为深入理解java集合框架底层源码打好基础 学习的视 ...

  2. AJAX发送PUT请求引发的血案

    如果直接发送ajax=put形式的请求      是拿不到请求体中的数据的.           Tomcat:              1.将请求体中的数据,封装一个map             ...

  3. 零基础学Python--------第9章 异常处理及程序调试

    第9章 异常处理及程序调试 9.1 异常概述 在程序运行过程中,经常会遇到各种各样的错误,这些错误统称为“异常”.这些异常有的是由于开发者将关键字敲错导致的,这类错误多数产生的是SyntaxError ...

  4. JavaScript基础-4

    4 流程控制 4.1 顺序结构 顺序结构是程序中最简单.最基本的流程控制,他没有特定的语法结构,程序会按照代码的先后顺序执行,程序中大多数的代码都是这样执行的: 4.2 分支结构 if 分支结构 注意 ...

  5. React-Native学习手册----搭建基于ios平台的开发环境

    首先推荐几个链接: React-Native 官网地址:https://facebook.github.io/react-native/docs/getting-started React-Nativ ...

  6. IntentService原理分析

    IntentService是一个异步处理请求的服务,通过Context#startService(Intent)可以将请求发送给IntentService,IntentService在工作线程中依次串 ...

  7. 学习RenderScript,以此来修改LiveWallpaper

    先留个坑,花5天的时间来填满.

  8. “等一下,我碰!”——常见的2D碰撞检测

    转自:https://aotu.io/notes/2017/02/16/2d-collision-detection/ 在 2D 环境下,常见的碰撞检测方法如下: 外接图形判别法 轴对称包围盒(Axi ...

  9. linux安装windows启动盘

    安装gparted

  10. 我喜欢的vs code快捷键for mac

    mac上的快捷键,尽量是像我用vs studio上靠近. cmd+K+S: 显示快捷键列 cmd+shift+p: 系统配置命令行 cmd+p:项目中文件列表,选择文件 cmd+shift+o:当前文 ...