python基础-文件处理

文件处理

文件三大疑问:什么是文件?为何要用文件?怎么用文件?

  • 文件(文件系统)是操做系统提供给咱们操做硬盘的一个工具
  • 使用文件系统是为了永久地保存数据

文件的操做方式

  • 相对路径和绝对路径python

    • 相对路径:从当前路径开始,相对与某个基准目录的路径
    • 绝对路径:从根目录也就是盘符开始的路径

    在编程中,建议使用相对路径编程

  • 操做文件的两种方法工具

    • open学习

      语法:f = open('文件名路径',mode,encoding) ,用于打开文件。编码

      文件路径:建议使用相对路径操作系统

      mode:打开文件的模式,有三种,分别是:rwa。通常和处理文件的两个模式套用。指针

      处理文件的两种模式是:tbcode

      encoding:打开文件,操做文件内容的编码设置对象

      # 第一种打开方式,这种打开方式,必须使用f.close()来关闭系统资源
      f = open("a.txt","r",encoding="utf-8")
      data = f.read()     # 读取a.txt 文件中的所有内容
      print(data)         # 打印文件中的内容
      f.close()           # 关闭操做系统资源
      模式 描述 特色
      rt 默认模式,可简写为 r。以文本文件且只读的模式打开文件 若是文件不存在,报错
      wt 可简写为 w。以文本文件且只写模式打开文件 若是文件不存在,建立一个新文件;若是文件中存在数据,重写文件中的内容
      at 可简写为 a,以文本文件且只写模式打开文件 若是文件不存在,建立一个新文件;若是文件中存在数据,在数据后追加内容
      rb 二进制字符且只读的模式打开文件 若是文件不存在,报错
      wb 二进制字符且只写的模式打开文件 若是文件不存在,建立一个新文件;若是文件中存在数据,重写文件中的内容
      ab 二进制字符且只写的模式打开文件 若是文件不存在,建立一个新文件;若是文件中存在数据,在数据后追加内容
    • with open() as …:blog

      语法:with open("文件名路径",mode,encoding)as f:建议使用这种方式对文件进行操做,上下文关联打开文件。优势:不只会自动回收系统资源,且能够同时打开多模式下的同一文件或多个文件。

      # 第二种打开方式,上下文关联方式,会自动关闭系统资源,建议使用这种方式
      with open("a.txt","r",encoding="utf-8") as f:
          data = f.read()
          print(data)
      
      # 同时打开多个文件,用逗号分隔开
      with open("a.txt","r",encoding="utf-8")as rf,\
          open("b.txt","w",encoding="utf-8") as wf:
          data = f.read()
          wf.write(data)
  • 文件处理的内置方法

    # a.txt 文件中的内容
    姓名:sean
    年龄:18
    性别:男
    描述:上海校区最帅的人
    • 语法 说明
      f.read() 默认一次性读取出全部的文件内容;参数根据mode的模式,若是是 t,读取文件的字符个数;若是是 b,读取文件的字节数
      f.readline() 一次只能读取一行内容
      f.readlines() 将数据所有读入内存中,以换行符分隔存入列表中
      f.readable() 判断文件是否可读,返回布尔值
      # 模式为:只读文本模式,r=rt 是read text
      with open("a.txt","r",encoding="utf-8") as f:
          print(f.readable())     # 打印结果为:True
          print(f.readline())     # 打印结果为:姓名:sean
          print(f.readlines())    # 打印结果为:列表['年龄:18\n', '性别:男\n', '描述:上海校区最自恋的人']
          f.seek(0,0)             # 将光标移动到文件的开始
          print(f.read())         # 打印结果为:全部的内容
      # 模式为:只读字节模式,rb 是read bytes。注意:使用字节模式,encoding参数不可用
      with open("c.txt","rb") as f:
          print(f"readable的结果:{f.readable()}")     # 打印结果:True
          print(f"read的结果:{f.read()}")         # 打印结果:文件全部内容的二进制字节
          f.seek(0,0)             # 将光标移动到文件的开始
          print(f"readline的结果:{f.readline()}")     # 打印结果:文件内容第一行记录的二进制字节
          f.seek(0,0)
          print(f"readline的结果:{f.readlines()}")    # 打印结果:列表形式的二进制字节

      打印结果:

    • 语法 说明
      f.write() 将数据写入文件
      f.writelines 可迭代对象的元素以字符串形式写入文件。等价于for+write()
      f.writeable 判断文件是否可写,返回布尔值
      # 只写文本模式,将文件中的原内容清空,重写了新的内容
      with open(r"a.txt","w",encoding="utf-8") as wf:
          print(f"是否可读:{wf.readable()}")      
          print(f"是否可写:{wf.writable()}")
          wf.write("这是使用write新写入的内容\n")
          wf.writelines(["这是使用writelines新写入的内容1\n","这是使用writelines新写入的内容2\n","这是使用writelines新写入的内容3\n"])      # 列表中的内容会拼接起来写入文件中
      
      # 验证是否将内容写入到a.txt 文件中
      with open(r"a.txt","r",encoding="utf-8") as  rf:
          print(rf.read())

      操做结果

      # 追加文本模式,保留文件中原来的内容,并在后面追加新的数据
      with open(r"a.txt","a",encoding="utf-8") as af:
          print(f"是否可读:{af.readable()}")
          print(f"是否可写:{af.writable()}")
          af.write("这是使用追加模式write写入的内容\n")
          af.writelines(["这是使用追加模式writelines新写入的内容1\n","这是使用追加模式writelines新写入的内容2\n","这是使用追加模式writelines新写入的内容3\n"])
      # 验证是否将内容写入到a.txt 文件中
      with open(r"a.txt","r",encoding="utf-8") as  rf:
          print(rf.read())

      操做结果

      1573219631390

    • 光标(指针)的操做

      语法 描述
      f.seek(offset,whence) offsetf:相对偏移度,也就是光标移动的位数,针对的是字节
      whence:用于指定光标位置从哪里开始。
      值只能是:0(文件开头),1(当前位置),2(文件末尾)。
      f.tell() 光标所在的位置
  • 注意:
    • utf-8 中,中文字符占3bytes,英文字符占1bytes
    • gbk 中,中文字符占2bytes,英文字符占1bytes
    • 操做文件时,必定要注意编码规则问题,谨记保证不乱码的核心:用什么编码存的数据,就用什么编码取

#### 扩展

咱们学习的读取文件 rwa 是纯净模式,还有 r+w+a+模式。这三种模式设置成了可读可写模式,其余特性跟纯净模式是同样的。

相关文章
相关标签/搜索