前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2017年9月5日

2017年9月5日

作者头像
阿章-python小学生
发布2018-05-18 16:59:48
6320
发布2018-05-18 16:59:48
举报
文章被收录于专栏:python全栈布道师
  1. python中可以表示字节的有bytes,bytesarray,memoryview
代码语言:javascript
复制
chinese = bytes('englishENG中文', encoding='utf8')
print(chinese) # bytes可以通过构造函数传入str获得
# b'englishENG\xe4\xb8\xad\xe6\x96\x87'
print(chinese[0]) # 使用索引可以获得range(256)之间的整数
# 101
print(chinese[:1]) # bytes切片还是bytes对象,哪怕只有一个字节
# b'e'
chinese_arr = bytearray(chinese) # bytearray没有字面量
print(chinese_arr)
# bytearray(b'englishENG\xe4\xb8\xad\xe6\x96\x87')
print(chinese_arr[:1]) # bytearray的切片还是bytearray对象
# bytearray(b'e')
print(bytes.fromhex('31 4B CE A9')) # fromhex可以解析16进制数字,空格可选
# b'1K\xce\xa9'
  1. 可以通过数组的原始数据初始化bytes对象。
代码语言:javascript
复制
numbers = array.array('h', [-2, -1, 0, 1, 2])  # h是占两个字节的有符号整型
octets = bytes(numbers)
print(octets)
# b'\xfe\xff\xff\xff\x00\x00\x01\x00\x02\x00'

1.通过结构体可以将字节序列转换成不同类型字段组成的元组或者反向转换。struct模块能处理bytes,bytearray,memoryview对象。 memoryview对象不是用于创建字节序列的而是共享内存,如PIL库就是这样处理的,不用复制字节序列了。

代码语言:javascript
复制
import struct

fmt = '<3s3sHH'  # 结构体的格式,<是小字节序,3s3s是两个3字节序列,HH是两个16位二进制整数。
with open('7a.jpg', 'rb') as fp:
    img = memoryview(fp.read())
    # 使用缓冲类对象缓冲bytes或bytearray时始终复制对象中的字节序列,与之相反,memoryview允许共享内存
header = img[:10]  # 使用切片会再创建一个memoryview对象,不会复制字节序列
print(bytes(header))  # 转换成字节序列为了显示,这里复制了10个字节。
# b'GIF89a\x00\x05\xd0\x02'
print(struct.unpack(fmt, header))  # 拆包memoryview对象,得到一个元组,包含类型、版本、宽度和高度。
# (b'GIF', b'89a', 1280, 720)
del header  # 删除引用,释放memoryview实例所占的内存
del img
  1. 侦测文件是什么编码类型,可以用chardet,既有python版本,又有命令行版本
代码语言:javascript
复制
import chardet

print(chardet.detect(b))
# {'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}
代码语言:javascript
复制
chardetect dict_test.py
# dict_test.py: utf-8 with confidence 0.99
  1. 利用gbk编码对汉字排序
代码语言:javascript
复制
# locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF8')
fruits = ['苹果', '梨', '西瓜', '哈密瓜', '橘子', '香蕉', '葡萄', '桔子']
# sorted_fruits = sorted(fruits, key=locale.strxfrm)
for f in fruits:
    print(f.encode('gbk'))
sorted_fruits = sorted(fruits, key=lambda s: s.encode('gbk', errors='ignore'))
print(sorted_fruits)
# ['哈密瓜', '桔子', '梨', '苹果', '葡萄', '西瓜', '香蕉', '橘子']

设置locale的办法在windows上经常得不到支持,蛋疼,退而求其次,可以使用gbk码表排序。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python全栈布道师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档