day09

文件处理

1.什么是文件

  • 文件是操作系统为用户或者应用程序提供的一个虚拟单位,用来存储数据。文件操作的核心就是:读和写
  • 操作文件的流程
    • a.打开文件
      open("路径",'操作模式',encoding="字符编码")
    • b.读取/修改文件
      r/w/a
    • c.保存文件
      f.flush()
    • d.关闭文件
      f.close()

2.文本文件的三种操作模式

重点:对文件的操作,不管是读取还是写入,光标都会移动。
就是说,每读一次,光标就往后/下移相应的位数一次。文本读一行少一行

  1. 读取r:(只读)
  2. 清空写w:(只写)
  3. 追加写a:(只写)
f = open('D:\python12期视频\1.txt','r',encoding = 'utf8')
f.read()
f.readline()   # 读取光标所在的那一行
f.readlines()  #一次性全部按行读取,存入列表中,一行是一个元素(包括最后的换行符)
for i in f.readlines():
    print(i)
for i in f:   # 一行一行读取,中间可以使用break/continue 中断,比上面的循环遍历节省空间
    print(i)

3.文件打开的两种方式

1.t模式

只针对文本文件,操作模式使用 rt,wt,at 。等价于 r ,w ,a

2.b模式

只针对多媒体文件,操作模式使用 rb,wb,ab

4.相对路径和绝对路径

  • 绝对路径:从盘符开始。 如:D:\上海python12期视频\python12期视频\day 09\test.py
  • 相对路径:执行文件(当前运行的文件)的文件夹下的文件名,执行文件和打开文件属于同一文件夹下
  • 未来写项目尽量用相对路径

5.with管理上下文

with提供了一个自动关闭文件(解除对操作系统的占用)

with open('test.py', 'r', encoding='utf8') as f:
    # print(f.read())
    # 在这个缩进下不会关闭文件,在这个缩进下对文件操作
    data = f.read()  # data放到python的内存中
print(f) # 关闭文件(操作系统),没有关闭python内存中的文件
print(data)# 关闭文件(操作系统),没有关闭python内存中的文件
print(f.read())  # 涉及操作系统,因此该代码报错

6.文本文件的高级处理应用

1. 三种可读可写的模式

  1. r+
    这种模式下的写入,新写入的字符会覆盖光标之后的字符
  2. w+
    该模式与w模式没有任何区别
  3. a+
    该模式下,开始时光标默认在文本的尾部。

2.光标的高级应用

(1)字节与字符

  • utf-8中规定:

    • 对于英文:8个二进制位为一个字节,1个字节组成一个字符。--》一个字符对应一个字母

    • 对于中文:8个二进制位为一个字节,3个字节组成一个字符。--》一个字符对应一个汉字

(2)移动光标的三种方法(以字节为单位)

  • seek(移动光标)

     with open('test.py', 'rb') as fr:
        fr.seek(5)  # 移动了3个字节,一个中文,默认从开头开始
        print(fr.read())
        print(fr.read().decode('utf8'))#使用utf8翻译内容
    
  • whence(seek 方法里的第二个参数,没有写就默认是0)

    whence 规定只有 0 ,1 ,2 三种模式

    0表示光标在文件头

    1表示光标在当前位置

    2表示光标在文件尾部

     with open('test.py', 'rb') as fr:
        fr.seek(5)  # 移动了3个字节,一个中文,默认从开头开始
        fr.seek(5,1) #当前光标位置进行移动
        fr.seek(8,2) #光标在文件尾部进行移动
    
  • tell(告诉你当前光标的位置)

  • truncate(截断)

    光标从文件头开始,到括号内的数字,之后的都删除掉

  • 移动光标(以字符为单位) read

with open('test.py', 'r', encoding='utf8') as fr:
     print(fr.read(3))  # n表示读取n个字符,不加默认读取所有 # 中文和英文都属于一个字符
posted @ 2019-09-18 18:05  ztzdhbg  阅读(126)  评论(0编辑  收藏  举报