七天学会Python基础-第四天1/2-文件操作

  1. 文件按操作的初始

    • 利用Python代码写一个软件,去操作文件

      • 文件路径:path
      • 打开方式:读,写,追加,读写,写读......
      • 编码方式:utf-8,gbk,gb2313......
    • f=open('d:\test.txt',encoding='utf-8',mode='r')
      content=f.read()
      print(content)
      f.close()
      
      • open为内置函数,open底层调用的是操作系统的接口
      • f为文件句柄,由用户自定义,对文件进行的任何操作都得通过文件句柄(建立变量与系统文件的映射关系)
      • encoding:可以不写,若不写参数,默认的编码本是操作系统的编码本。
        • windows:gbk
        • linux:utf-8
        • mac:utf-8
      • read:全部读取出来
      • close:关闭文件句柄(切断映射关系)
    • 文件操作三部曲

      1. 打开文件
      2. 对文件句柄进行相应的操作
      3. 关闭文件
    • 操作原因:

      • UnicodeDecodeError:文件存储时与文件打开时编码本运用不一致
      • SyntaxError:语法错误,Python将路径中的反斜杠识别成了转义字符,解决方法
        • 使用两个反斜杠
        • 路径前面,引号外面加个r,表示这个字符串中所有反斜杠都表示路径,不进行任何转义
  2. 文件操作的读(r,rb,r+,r+b......)

    • f=open(path,mode='r',encoding="utf-8")

      • content=f.read(n),不加参数获取文件全部内容,加n获取n个字符

      • content=f.readline(),读取一行,读完后游标移动到下一行

      • lst1=f.readlines(),返回一个列表,里面每一个元素是文件中的一行

      • for 读取

        • for line in f:
              print(line)
          f.close()
          
    • f=open(path,mode='rb'),操作的是非文本的文件,图片,视频,音频

      • 拥有的方法同上
  3. 文件操作的写(w,wb,w+,w+b......)

    • 没有文件创建文件,有文件则清空文件,再写入

    • f=open(path,mode='w',encoding="utf-8")

      • f.write('书写内容')
    • f=open(path,mode='wb')

      • f.write(str),注意:此时的str为bytes类型
  4. 文件操作的追加(a,ab,a+,a+b......)

    • 没有文件创建文件,有文件则在源文件末尾追加内容

    • f=open(path,mode='a',encoding="utf-8")

    • f.write('书写内容')

  5. 文件操作的其他模式

    • r+(读写)
      • 没有文件,不创建文件
      • 这里有一个游标的概念
      • f=open(path,mode='r+',encoding="utf-8")
        • 若先读后写,则进行追加
        • 若先写则进行覆盖,从游标位置开始读取
  6. 文件操作的其他功能

    • 总结
      • 三个大方向:
        • 读:r,r+,rb,r+b
        • 写:w,w+,wb,w+b
        • 追加:a,a+,ab,a+b
      • 相应的功能:对文件句柄的操作:read(),read(n),readline(),readlines(),write()
        • f.tell(),获取游标位置,单位是字节
        • f.seek(6),调整光标位置,默认从0开始读
        • f.flush(),强制刷新(保存),写完文件可能不会立马刷新
  7. 打开文件的另一种方式

    • with open(path,mode='r',encoding='utf-8') as f:

      • 优点1:不用手动关闭,简化了文件操作,会在一定时间内自动关闭

      • 优点2:可以操作多个文件

      • 缺点:待续

        • with open(path,mode='r',encoding='utf-8') as f,with open(path2,encoding='utf-8',mode='w') as f2:
              print(f1.read())
              f2.write('新内容')
          
  8. 文件操作的改

    • 现存世界上对文件进行修改操作的软件都离不开这五部

      1. 以读的模式打开源文件
      2. 以写的模式创建一个新文件
      3. 将原文件的内容读出来(加载到内存)修改成新内容,写入新文件
      4. 将源文件删除(需要引入os模块)
      5. 将新文件命名成原文件
      # 基础版本(将内容全部读取出来,适用于小文件)
      import os
      # 1. 以读的模式打开源文件
      # 2. 以写的模式创建一个新文件
      with open('oldname',encoding='utf-8',mode='r') as f1 , open('newname',encoding='utf-8',mode='w') as f2:
          # 3.将源文件全部读取出来改成新内容
          old_content=f1.read()
          new_content=old_content.replace('alex','taibai')
          f2.write(new_content)
      os.remove('oldname')
      os.rename('newname','oldname')
      
      # 进阶版(一行一行读取:适用于大文件)
      import os
      # 1. 以读的模式打开源文件
      # 2. 以写的模式创建一个新文件
      with open('oldname',encoding='utf-8',mode='r') as f1 , open('newname',encoding='utf-8',mode='w') as f2:
          # 3.将源文件全部读取出来改成新内容
         for line in f1:
          	# 第一次循环line是第一行
              # old_line=line.strip()
              new_line=old_line.replace('taibai','alex')
              f2.write(new_line)
      os.remove('oldname')
      os.rename('newname','oldname')
      
    • 补充:

      • 有关清空的问题,使用w模式操作文件时,只有关闭文件句柄后再使用w模式打开才会清空
posted @ 2021-05-18 22:56  double大博  阅读(84)  评论(0)    收藏  举报