文件流


mode 模式字符的含义
  Character Meaning
  --------- ------------------------------------
  'r'       以只读方式打开(默认)


  'w'       以写方式打开,删除原有文件内容(如果文件不存在,则创建这个文件)


  'x'       创建一个新文件,以写模式打开(如果文件已经存在,则会触发FileExistError)


  'a'       以写模式打开,如果文件存在,则追加文件末尾


  'b'       用二进制模式打开文件


  't'       用文本模式打开文件(默认)


  '+'       为更新内容打开一个磁盘文件(可读可写)
  ========= ====================================


python 文件操作的方法:
  F 代表文件流对象
F.close()    关闭文件
F.readline() 读取一行数据,如果达到文件尾则返回空字符串
F.readlines(max_chars=-1) 返回每行字符串的列表, max_chars为最大字符(或字节)数
F.writelines(lines)  写入字符串列表到文件中
F.read(size=-1)  从一个文件流中读取size个字符(或字节)
F.write(s)       写一个字符串(或字节串)到文件中,返回写入的字符数(字节数)
F.tell()        返回当前文件流的绝对位置
F.seek(offset, whence=0) 改变数据流的位置,返回新的绝对位置
F.flush()  把写入文件对象的缓存内容写入到磁盘




二进制文件
  什么是二进制文件
  文件中以字节(byte)为单位存储,不以换行符(\n)为单位进行区分内容的读写方法


F.read() 返回类型 :
  对于文本文件,F.read()返回类型为 字符串 (str)
  对于二进制文件,F.read()返回类型为字节串(bytes)




字节串 bytes (也叫字节序列)
bytes类型的作用:
  存储以字节为单位的数据
  字节串是不可变的字节序列
  说明:
    字节是0~255(2**8-1)之间的整数


创建字的字节串字面值:
   b = b''
   b = b""
   b = bytes()  # b 为字空节串


创建非空字节串:
   b = b'ABCD'  # 有四个字节的字节串
   b = b"1234"
   b = b'\x41\x42'  # b = b'AB'


字节串的构造(创建)函数
  bytes()  生成一个空的字节串 等同于 b''
  bytes(n)  生成n个值为0的字节串
  bytes(字符串, encodeing='utf-8') 用字符串的转换编码生成一个字节串
  bytes(整型可迭代对象)  用可迭代对象初始化一个字节串


示例:
  b = bytes(10)  # 10个0
  b = bytes("ABCD", 'utf-8') # b = b'ABCD'
  b = bytes("ABCD中文", 'utf-8')  # ...
  b = bytes(range(0x41, 0x41+26))


bytes 运算:
  +  +=  *  *=
  < <= > >= == != 
  in / not in 
      b = b"1234abcd"
      b'a' in b  # 对的
      '1'  in b  # 错的
      0x61 in b  # 对的
      300  in b  # 错的
  索引和切片 (与字符串的索引和切片完全相同)


序列相关的函数可以用于字节串:
  len(x)  max(x)  min(x) ....


bytes 与 str 的区别
   bytes 存储的是字节(0~255)
   str   存储的是Unicode字符(0~65535)


bytes 与 str 转换
  str ---> bytes
     b = s.encode(encoding='utf-8')  # encode编码
  bytes --> str
     s = b.decode(encoding=utf-8)  # decode 解码


字节数组 bytearray
  可变的字节序列


tuple --> list
bytes --> bytearray


bytearray 的构造函数
    bytearray()  创建空的字节数组
    bytearray(整数)
    bytearray(字符串,encodeing='utf-8')
    bytearray(整型可迭代对象)
    bytearray(字节串)


操作:
  同字节串相同
   + += * *=
   < <= > >= == !=
   in / not in 
   索引 / 切片
  注:
    字节数组可以索引和切片赋值,赋值规则同列表的赋值规则
示例:
  ba = bytearray(b'ABCDEFG')
  ba[1] = 0x31  # 索引赋值
  ba[3::2] = [0x32, 0x33]




bytearray 的方法:
ba.clear()  清空
ba.append(n)  追加一个字节(n为0~255的整数)
ba.remove(value) 删除第一个出现的字节,如果没有出现则产生ValueError错误!!!!!
ba.reverse()  字节的顺序进行反转
ba.decode(encoding='utf-8')
ba.find(sub[,start[,end]])




python3 内建序列:
  str, list, tuple, bytes, bytearray
python3 中可变的数据类型 
   list, dict, set, bytearray



标准输入输出文件
    sys.stdin  # 键盘(默认)
    sys.stdout  # 控制台终端
    sys.stderr  # 控制台终端
    模块名:sys


示例见:
  stdout.py
  stdin.py


Linux/UNIX 下 Ctrl + d 输入文件结束符
Windows 下 Ctrl + z  输入文件结束


输出重定向:
  $ ls -l > 1.txt
  $ find . -name "passwd"  2> error.txt


输入重定向:
  $ python3 stdin.py < input.txt




练习:
  写一个程序,从键盘输入一段字符串,存入变量s
  1.将此字符串转为字节串,绑定变量b,并打印出来
  2. 打印字符串的字节串的长度
  3. 将b字符串转换为字符串用s2绑定,判断s2与s是否相同

  1. 把输入的内容存入文件中,在sublime text 3 中查看输入的内容是否与所输入相同
  2. 把此文件复制到 windows 下。看能否能用记事本打开


问题:
  十个汉字是多少个字节
  答: 
     GBK: 20字节
     UTF-8 30字节
     GB18030 20~40个字节




汉字编码:
  00000000 - 0
  11111111 - 255
  至少两字节
  00000000 00000000  -> 0
  11111111 11111111  -> 65535


只讲两种:
  国标系列: GB18030(GBK(GB2312))
  国际标准: UNICODE  <==>  UTF-8


GB2312-80编码:
  1980年发布
  用两个字节表示,编码范围(A1A1~FEFE)
  包含汉字 6763个,和 682个全角字符
  A1-FE (0xFE-0xA1+1)


GBK 编码:
  1995年制订
  用两个字节码,编码范围(8140~FEFE)(剔除7F) 共收录了21003个汉字
  完全兼容 GB2312-80


GB18030-2005
  2005 年制订收录了27533个汉字
  用两个字节或四个字节进行编码
  两字节部分完全兼空GBK,
  81 30 xx xx


UNICODE 编码:
  UNICODE16
     16位统一编码(0~65535)
  UNICODE32
     32位统一编码(0~4294967295(2**32-1))


   
'A'   0x41       ASCII
'A'   0x0041     UNICODE16
'A'   0x00000041 UNICODE32


UTF-8(8-bit Unicode Transformation Format)
  UNICODE  <<----->>  UTF-8 互转
  0000 ~  007F        一个字节(ASCII)
  0080 ~  07FF        二个字节(其它小语种)
  0800 ~  FFFF        三个字节(汉字落在此区)
  (具体算法参见wiki或百度百科)


python3 的 str 字符串(存UNICODE16 (0~65535)




Windows 默认用GB系列:
Linux/Unix/IOS/MAX OS X/Android  默认用UNICODE系列编码

Python 编码(encode)字符串
    'gb2312'
    'gbk'
    'gb18030'
    'utf-8'
    'ascii'
    str.encode(encodeing=xxxx)


编码注释:
  在python源文件的第一行或第二行写入如下内容可设置
  源文件的编码格式:
    # -*- coding:utf-8 -*-
    # 设置源码为utf-8编码
  或
  # -*- coding:gbk -*-
    # 设置源码为gbk编码





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值