二进制文件:
二进制文件是以字节(byte) 为单位存储的,不以换行符(\n)为单位进行区分内容的文件读写方法
打开模式mode:
'b'
方法:
F.read()返回类型:
对于文本文件,F.read()返回类型为字符串(str)
对于二进制文件,F.read()返回类型为字节串(bytes)
F.write(x) 用于文本/二进制文件的写
F.tell() 返回当前文件流的绝对位置
F.seek(offset, whence=0) 改变数据流的位置,返回新的绝对位置
F.readable() 判断文件是否可读,可读返回True,否则返回Flase
F.writeable() 判断文件是否可写。可写返回True,否则返回False
F.flush() 把写入文件对象的缓存内容写入到磁盘
F.seek方法:
F.seek(偏移量, whence=相对位置)
偏移量:
大于0的数代表向文件末尾方向移动
小于0代表向文件头方向移动
相对位置:
0 代表从文件头开始偏移
1 代表从当前读写位置开始偏移
2 代表从文件尾开始偏移
字节串(也叫字序列) bytes
作用:
存储以字节为单位的数据
字节串是不可变的字节序列
说明:
字节是0~255之间的整数(0b11111111, 0b00000000)
创建空字节串 :
B = b'' # 空字节串
B = B""
B = bytes() # B 为空字节串
创建非空的字节串:
B = b"ABCD"
B = b'ABCD'
B = b'''ABCD'''
B = b'\x41\x42'
字节串的构造(创建)函数 bytes
bytes() 创建一个空字节串, 等同于b''
bytes(整型可迭代对象) 用可迭代对象初始化一个字节串(数值必须是0~255的整数)
bytes(整数n) 生成n个值为0的字节串
bytes(字符串, encoding='utf-8') 用字符串转换编码生成一个字节串
示例:
B = bytes(range(0x41, 0x41+26)) # b'ABCD...'
B = bytes(4) # b'\x00\x00\x00\x00'
B = bytes("hello", 'ascii') b'hello'
B = bytes("中文", 'utf-8') # b'\xe4\xb8\xad\xe6\x96\x87'
字节串的运算:
+ += * *=
比较运算: < <= > >= == !=
in /not in 运算符
索引 index / 切片 slice
b'ABCD' --> (0x41, 0x42, 0x43, 0x44)
字节数组 bytearray
可变的字节序列,相当于bytes的可变版本
创建函数bytearray
bytearray()
bytearray(整型可迭代对象)
bytearray(整数n)
bytearray(字符串, encoding='utf-8')
运算操作:
同字节串完全相同
字节数组可以通过索引和切片赋值来改变原字节数组
例:
ba = bytearray(b"ABCDE")
ba[0] = 0x61 # 'a'
print(ba) # bytearray(b'aBCDE')
ba[1:] = bytearray(b'bcde') # bytearray(b'abcde')
B = bytes(ba) # 转为字节串
ba2 = bytearray(B) # 转为字节数组
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]]) 查找子字节串
bytes/bytearray与str 的区别:
bytes/bytearray 存储字节(0~255)
str 存储unicode字符(0~65535)
bytes与str转换:
str ---> bytes
b = s.encode(encoding='utf-8')
bytes---> str
s = b.decode(encoding='utf-8')
标准输入输出文件:
sys.stdin 标准输入文件
sys.stdout 标准输出文件
sys.stderr 标准错误输出文件
模块名:sys
说明:
每一个python程序启动后都会能以上三个已经打开的文件供我们使用
Linux 下输入 Ctrl+d 输入文件结束符
Windows 下输入 Ctrl+z 文件结束
输入重定向
输入重定向的内容将发送给sys.stdin
用法:
$ python3 sys_std.py < 输入文件
汉字编码
问题:
十字汉字是多少个字节?
答: GBK(20个字节)/ UTF-8(30个字节)
常用编码:
国标系列: GB18030(GBK(GB2312))
(windows常用)
国际标准: UNICODE <---> UTF-8
(Linux / Mac OS X / IOS / Android等常用)
GB2312-80编码:
1980年发布
两个字节进行编码,编码范围(A1A1-FEFE)
含有6763个汉字和682个字符
GBK编码:
1995年制订
用两字节编码(8140~FEFE)
完全兼容GB2312,共21003个汉字(汉文,蒙文等)
GB18030-2005 编码:
2005年制订共27533个汉字
用两个字节和四字节进行编码
两字节与GBK相同
四字节:
略
UNICODE16编码(0x0000 ~ 0xFFFF)
UTF-8编码 (8-bit Unicode Transformation Format)
UNICODE <<---->> UTF-8互转
0000~007F 一字节(ASCII)
0080~07FF 二字节
0800~FFFF 三字节(汉字落在此区)
UNICODE编码:
UNICODE16(两字节)
UNICODE32(四字节编码)
Python 编码(encode)字符串:
'gb2312'
'gbk'
'gb18030'
'utf-8'
'ascii'