Python之路,第十六篇:Python入门与基础16
python3 bytes 和 bytearrary
bytes
二进制文件的读写:
什么是二进制文件读:
文件中以字节(byte)为单位存储,不以换行符(\n)为单位分隔内容的文件;
- f = open('mytext.txt', 'w')
- f.write("你好中国")
- f.close()
- $xxd mytest.txt
- e4db a0e5 a5bd b8ad e59b bd0a
二进制文件操作方法:
F.read( size = -1 ) 从一个文件流中最多读出size个字符
F.write(字符串/字节串) 写一些数据到文件流中,返回写入的字节数(字符数)
F.tell() 返回当前文件流的绝对位置
F.seek( cookie, whence=0) 改变数据流的位置,返回新的绝对位置
F.readable() 判断这个文件是否可读,可读则返回True
F.writable() 判断这个文件是否可写,可写则返回True
- f = open('mytext.txt', 'rb')
- b = f.read() # bytes 类型
- f.close()
- print(len(b)) #用len取值
F.read() 返回类型:
文本文件, 返回字符串
二进制文件,返回字节串(字节序列)
- f = open('mytext.txt', 'wb')
- f.write("你好".encode("utf-8")) #6个字节
- f.write(b"ABCD")
- f.write(b"\n")
- f.write(b"hello abcd\n")
- f.close()
- f = open('mytell.bin', 'wb')
- print("f.tell返回:", f.tell()) #
- b = f.read(5)
- print(b)
- print("f.tell返回:", f.tell()) #
- f.close()
F.write(x) 函数
F.seek(偏移量, whence=相对位置)
偏移量: 大于0 的数代表向文件尾放心移动
小于0 的代表向文件头方向
相对位置:
0 代表从文件头开始偏移;
1 代表从当前位置开始偏移;
2 代表从文件尾开始偏移;
- f = open('mytell.bin', 'wb')
- print("f.tell返回:", f.tell()) #
- b = f.read(5)
- print(b)
- print("f.tell返回:", f.tell()) #
- f.seek(10, 0) # 从开头向后10个字节
- f.seek(5, 1) # 从当前位置向后移5个字节
- f.seek(-10, 2) # 从文件尾向前移动10个字节
- b = f.read(5) #读5个字节
- print(b) #b'12345'
- f.close()
bytearray类型
bytes 类型不可变类型
bytearray 类型为可变的数据类型
操作
+ += * *=
比较运算:< 、<= > >= == !=
in / not in 运算符
bytearray 的方法
B.clear() 清空
B.append(n) 追加一个字节(n为0-255的整数)
B.remove(value) 删除第一次出现的字节,如果没有出现,则产生ValueERROR错误
B.reverse() 字节的顺序进行反转
B.decode(encoding='utf-8') 转换成字符串
B.find(sub[, start[,end]]) 查找到了会返回大于等于零的数,查找失败返回-1的数;
创建字节串(bytearray)的函数
bytearray()创建空的字节串
bytearray (整数)
bytearray(整型可迭代对象)
bytearray(字符串,encoding='utf-8')
index /slice 索引/切片
- bytearray()
- bytearray(b'')
- bytearray(10)
- bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
- bytearray([65,66,67,8])
- bytearray(b'ABC\x08')
- bytearray([65,66,67,68])
- bytearray(b'ABCD')
- bytearray('ABCD你好','utf-8')
- bytearray(b'ABCD\xe4\xbd\xa0\xe5\xa5\xbd')
- bytearray(b'abcdef')
- bytearray(b'abcdef')
- ba1 = bytearray(b'ABCD')
- ba2 = bytearray(b'EF')
- ba1 + ba2
- bytearray(b'ABCDEF')
- ba1
- bytearray(b'ABCD')
- ba1[0]
- 65
- ba1[0]=97
- ba1
- bytearray(b'aBCD')
- ba3 = bytearray(b'ABCDEF')
- ba3[::2]
- bytearray(b'ACE')
- ba3
- bytearray(b'ABCDEF')
- ba3.clear()
- ba3
- bytearray(b'')
- ba3.append(97)
- ba3
- bytearray(b'a')
- ba3.append(98)
- ba3
- bytearray(b'ab')
- ba3.append(100)
- ba3.append(97)
- ba3
- bytearray(b'abda')
- ba3.remove(97)
- ba3
- bytearray(b'bda')
- ba3.remove(97)
- ba3
- bytearray(b'bd')
- ba3.remove(97)
- Traceback (most recent call last):
- File "<input>", line 1, in <module>
- ValueError: value not found in bytearray
- ba = bytearray(b'A1B2C3D4')
- ba.reverse()
- ba
- bytearray(b'4D3C2B1A')
- s = ba.decode('utf-8')
- s
- '4D3C2B1A'
- type(s)
- <class 'str'>
- ba
- bytearray(b'4D3C2B1A')
- ba.find(bytearray(b'3C'))
- 2
- ba.find(bytearray(b'3CC'))
- -1
练习1
- #有一个bytearray字节序列,ba = bytearray(b'a1b2c3d4')
- #如何得到1234和abcd
- #将上述bytearray 修改为bytearray(b'A1B2C3D4')
- ba = bytearray(b'a1b2c3d4')
- print(ba[1::2]) #bytearray(b'1234')
- print(ba[1::2].decode('utf-8')) #
- print(ba[::2].decode('utf-8')) #abcd
- #
- ba[::2] = 'ABCD'
- #ba[::2] = 'ABCD'
- #TypeError: can assign only bytes, buffers, or iterables of ints in range(0, 256)
- ba[::2] = b'ABCD' #bytearray(b'A1B2C3D4')
- ba[::2] = bytearray(b'ABCD') #bytearray(b'A1B2C3D4')
标准输入输出文件:
sys.stdin
sys.stdout
sys.stderr
模块 sys
例子:
------mystdout.py-----------
sys.stdout.write("你好") #标准输出
sys.stdout.write("\n中国\n")
sys.stderr.write("我的出现是个错误\n")#标准错误输出
s = sys.stdin.read() #标准输入
print(s)
--------------
mystdout.py < input.txt
----------------input.txt------
这是标准输入的文本。
》》》
你好
中国
我的出现是个错误
这是标准输入的文本。
=========================================
ctr + D 输入文件结束符
输入重定向的文件内容将发送给sys.stdin
=================
汉字编码:
GB18030 ( GBK ( GB2312 ) )
UNICODE <-> UTF-8
注:BIG5(略过)
GB2312-80编码: 1980年发布,用两个字节进行编码,编码范围(A1A1~FEFE)包含汉字6763个和682个其他字符;
GBK编码:1995年制订,两个字节编码(8140~FEFE)(剔除xx7F)收录文字21003个;
第一个字节: 81-FE
第二个字节: 40-7E, 80-FE
GB18030-2005编码:收录了27533个汉字,用两字节或四字节进行编码;
ISO:
UNICODE -16 (两字节)
0x0000 -- 0xFFFF
ASCII ( 0-127 ) --> ( 0x0000-0x007F )
UNICODE-32(四字节)
ASCII (0-127) ---> ( 0x00000000-0x0000007F )
UTF-8 ( 8-bit unicode Transformation Font/Format )
Unicode <<--->>UTF-8 互转
0x0000 ~ 0x007F 一字节
0x0080 ~ 0x07FF 二字节
0x0800 ~ 0xFFFF 三字节(中国落在此区域)
- f = open("gb2312.txt",'rb')
- b = f.read()
- s = b.decode('gbk') #'gbk'/'gb2312'/'gb18030'
- print(s)
- f.close()
- #我是gbk测试中文#gb2312.txt
Python之路,第十六篇:Python入门与基础16的更多相关文章
- 【Python之路】第六篇--Python基础之模块
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- Python之路(第二十六篇) 面向对象进阶:内置方法
一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...
- Python之路(第十六篇)xml模块、datetime模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...
- Python之路【第六篇】:socket
Python之路[第六篇]:socket Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...
- Python之路【第六篇】python基础 之面向对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 和 issubclass(su ...
- Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...
- Python之路(第二十四篇) 面向对象初级:多态、封装
一.多态 多态 多态:一类事物有多种形态,同一种事物的多种形态,动物分为鸡类,猪类.狗类 例子 import abc class H2o(metaclass=abc.ABCMeta): def _ ...
- Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块
一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...
- Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包
一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...
- Python之路【第六篇】python基础 之面向对象(一)
一.三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比 ...
随机推荐
- [NOIP 2014TG D1T3] 飞扬的小鸟
题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便 ...
- Hive QL的操作
一.数据定义DDL操作 创建表: --create table为创建一个指定名字的表 create(external) table table_name --external关键字可以让用户创建一个外 ...
- 关于Oracle RAC中SCN原理和机制的探索
今天看书时看到了关于RAC中SCN的问题,为了进一步搞清楚其内部原理和机制,对该问题进行了广泛的查阅和搜索,遗憾的是,可以参考的资料很少,网上大部分是人云亦云的帖子,其中,详细介绍其内部原理和机制的资 ...
- spring boot整合shiro后,部分注解(Cache缓存、Transaction事务等)失效的问题
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/elonpage/article/details/78965176 前言 整合有缓存.事务的sprin ...
- 字符串和数组----string
一.初始化string对象的方式 #include <iostream> #include <string> using std::cout; using std::endl; ...
- Vue--项目开发之实现tabbar功能来学习单文件组件2
上一篇文章里item.vue里的span标签内容是写死了,但是我们不希望写死 所以对于五个tab选项的标题需要从外部传入,也就说 需要在item.vue里的script里写上 export defau ...
- 服务消费和负载(Ribbon)
使用RestTemplate调用服务 在上一篇教程中,我们是这样调用服务的,先通过 LoadBalancerClient 选取出对应的服务,然后使用 RestTemplate 进行远程调用. Load ...
- day05 数据类型
一.整形int 基本使用: 1,用途:记录年龄\等级\各种号码 2定义方式: age=18 age =int(18) x =int(‘123’)#只能将纯数字的字符串转换成整形 print(t ...
- Kafka.net使用编程入门(一)
最近研究分布式消息队列,分享下! 首先zookeeper 和 kafka 压缩包 解压 并配置好! 我本机zookeeper环境配置如下: D:\Worksoftware\ApacheZookeep ...
- images