文件处理

知识储备

(1)三大核心硬件
  ①CPU,内存,硬盘
  程序最先存放于硬盘,程序启动读取数据用硬盘把数据加载到内存,CPU再从内存读取数据,并执行
    1)文本编辑器执行流程
      a.启动一个编辑器,编辑器会把数据从硬盘读取到内存,编辑器会把读取到内存的数据显示到屏幕上
    2)Python解释器执行流程
      a.启动Python解释器,解释器会从硬盘把数据读取到内存,Python解释器开始执行读取的内容,识别语法
(2)文本编辑器执行流程 与 Python解释器执行流程
  相同:都是从硬盘读取数据到内存
  不同:读取数据后的处理方式,文本编辑器直接显示内容,而Python解释器则要执行代码,识别语法

字符编码

什么是字符编码?
  字符编码是人类可以读懂的字符
为什么要字符编码?
  因为计算机是用二进制数只有0和1来表达而对于人类则很难懂表达的内容,使用引用字符编码,编码成人类可以看到的内容。
怎么用字符编码?
  字符编码分为 ASCII码 , GBK , Unicode,utf-8
ASCII 码: 
  是字符与数字的对照表
  只支持英文
  一个英文字符对应1个字节,1个字节表示8位
GBK :
  只支持英文,中文
  一个英文字符对应1个字节,1个字节表示8位
  一个中文字符对应1个字节,1个字节表示16位

Unicode:
  万国码是所有语言字符与数字的对应关系,万国码具有兼容性
  通常两个字节表示一个字符,个别4个字节,8个字节

Utf-8:
  是万国码的压缩版
  一个英文字符对应1个字节
  一个中文字符对应3个字节

结论:

1.内存固定使用Unicode无论输入任何字符都不会乱码,我们可以改变存入硬盘的格式
2.存取文件,如果编码不正确则出现存乱或者取乱
    (1)存乱:编码格式设置成支持文件内容的格式
    (2)取乱:文件以什么格式存就以什么格式取

Python3 默认格式: utf-8

  Python3 字符串类型默认存 Unicode格式

Python2 默认格式: ASCII

  Python2 字符串类型存 在字符串前加一个u

 

编码与解码

(1)编码:encode
    字符串转字节
(2)解码:decode
    字节转字符串        

文件操作

什么是文件?
  文件是指操作系统给用户提供间接操作硬盘的接口
为什么用文件?
  文件可以永久保存数据到硬盘中
资源回收与with上下文管理
  资源回收:
F = open('a.txt' , "rt", encoding = 'utf-8')
Date = F.read()
F.close()# 关闭文件(当文件关闭了之后就不能在继续读取数据)
del F # 删除文件回收资源(当删除了之后数据则就不存在了)
  With 上下文管理 : 可以自动关闭文件
with open('a.txt' , "rt") as f:
    pass

文件操作模式

t,b模式,这两个模式不能单独使用,必须与r,w,a使用
  t(文本文件)模式:
    读,写都是以字符串为单位
    必须指定encoding = “格式”
  ①r : 只读(默认)
  ②w : 只写
    1)在文件没有关闭的情况下,会连续写入
    2)如果以w 模式打开文件则会清空文件内容
  ③a :只追加写
    1)以a 模式打开文件,如果文件不存在则会新建文件,存在则在内容末尾追加新写的内容
  w与a的区别:
    相同:在文件不关闭的情况下,添加的数据则在就的数据后面
    不同:w模式打开文件则内容清空,a模式打开文件则不会清空,光标停在内容的末尾

  b(字节)模式:
    读,写都是以字节为单位
    可以读取所有文件
    不用指定encoding格式

  ④r : 只读(默认)
  ⑤w : 只写
    1)在文件没有关闭的情况下,会连续写入
    2)如果以w 模式打开文件则会清空文件内容
  ⑥a :只追加写
    1)以a 模式打开文件,如果文件不存在则会新建文件,存在则在内容末尾追加新写的内容
  w与a的区别:
    相同:在文件不关闭的情况下,添加的数据则在就的数据后面
     不同:w模式打开文件则内容清空,a模式打开文件则不会清空,光标停在内容的末尾
指针移动以bytes为单位
  t模式 read(n),n表示字符的个数
  tell():获取文件指针当前位置
  Seek(n,模式):n表示字节个数,
  模式:
  a.0,参照开头位置
  b.1,参照当前位置
  c.2,参照文件末尾
强调:0 模式可以在t模式中使用,1,2在b模式中使用
import time
with open('test.txt','rb') as f:
    f.seek(0,2)
    while True:
        line=f.readline()
        if line:
            print(line.decode('utf-8'))
        else:
            time.sleep(0.2)

 

posted @ 2020-04-25 14:45  zhw_sylvia  阅读(126)  评论(0)    收藏  举报