0x00:概述

一、什么是文件

  • 内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。
  • 计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备上的一段数据流。所谓“长期储存设备”一般指磁盘、光盘、磁带等。其特点是所存信息可以长期、多次使用,不会因为断电而消失。

二、文件的作用

  • 把一些长期存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力
  • 通俗来讲,文件的作用就是持久化存储数据

0x01:文件的基础操作

一、文件的打开和关闭

  • 文件操作流程

    1. 打开文件,或者新建一个文件
    2. 读/写数据
    3. 关闭文件
  • 打开文件

在Python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

    • 语法格式:文件变量 = open(文件名称, 访问模式)

      • 注意:文件名称,访问模式都是字符串格式
    _file = open('fox.txt', 'w')
    • 关闭文件

      • 手动关闭文件

        • 关闭文件,为了释放资源
        • 语法格式:文件变量.close()
    • 自动关闭文件
      with open("fox.txt", "w") as _file:
          pass  # 执行完缩进代码, 会自动关闭件

    二、文件的读写

    • 写数据

      • 使用write()可以完成向文件写入数据
      • 语法格式:文件变量.write(内容)
      """
      # 1. 打开文件,只写方式打开
      # 2. 写文件
      # 3. 关闭文件
      """
      
      # 1. 打开文件,只写方式打开
      _file = open('fox.txt', 'w')
      
      # 2. 写文件
      # 写文件格式:文件变量.write(所需的内容)
      _file.write('hello abc')
      _file.write(' hello python')
      
      # 3. 关闭文件
      _file.close()
    • 读数据

      • read

        • 语法格式:内容变量 = 文件变量.read(n)
        • n为读取的字符数,若不设置则全部读取
      # 1. 打开文件,只读方式打开,'r'
      # 2. 读取文件内容
      # 3. 关闭文件
      
      # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃
      _file = open('fox.txt', 'r')
      
      # 2. 读取文件内容
      # 格式: 内容变量 = 文件变量.read(读取的长度)
      #       如果read的长度不指定,默认读取全部
      _data = _file.read(4) # 读取前4个
      print(_data)
      
      _data = _file.read() # 接着前面,读完所有的
      print(_data)
      
      # 3. 关闭文件
      _file.close()
      • readlines

        • readlines()一次全部读出,读取所有的行,按行作为分隔条件,返回列表(每行内容是一个元素)
        • 语法格式:内容列表变量 = 文件变量.readlines()
      # 1. 打开文件,只读方式打开,'r'
      # 2. 读取文件内容
      # 3. 关闭文件
      
      # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃
      _file = open('fox.txt', 'r')
      
      # 2. 读取文件内容
      # readlines: 读取所有的行,按行作为分隔条件
      # 格式:内容列表变量 = 文件变量.readlines()
      _data = _file.readlines()
      print(_data)
      
      # 通过for取出列表的所有元素
      for _line in _data:
          print(_line)
      
      # 3. 关闭文件
      _file.close()
      • readline

        • readline()每次读取文件中一行数据
        • 语法格式:内容变量 = 文件变量.readline()
      # 1. 打开文件,只读方式打开,'r'
      # 2. 读取文件内容
      # 3. 关闭文件
      
      # 1. 打开文件,只读方式打开,'r';'r': 打开文件,必须存在,不存在,报错崩溃
      _file = open('fox.txt', 'r')
      
      # 2. 读取文件内容
      # readline:   一次读取一行
      # readline格式:内容变量 = 文件变量.readline()
      _data = _file.readline()
      print(_data)
      
      # 3. 关闭文件
      f.close()
    • 分片读取文件内容

    在处理数据时,有可能会碰到好几个 G 大小的文件。如果通过一些工具(例如:NotePad++)打开它,会发生错误,无法读取任何内容;

    这个时候若使用Python传统的读取方式read()或者readlines()方法将整个文件读入内存时,在文件较大的时候,往往会引发内存溢出错误MemoryError;

    所以在这个时候,我们就可以选择以分片读入的方式,一点一点的将内容读入内存中。

    • 姿势一:使用readline()逐行读取

    1. open("fox.txt", "r") as _file:
      while True:

      _line = _file.readline()  # 逐行读取
      if not _line:
          break
      print(_line)
    • 姿势二:指定每次读取的长度

    1. open("fox.txt", "r") as _file:
      while True:

      _data = _file.read(chunk_size)
      if not _data:
          break
      print(_data)
    • 姿势三:使用fileinput模块

    1. fileinput
    2. _line in fileinput.input(['fox.txt']):
      print(_line)


    0x02:文件打开详解

    一、访问模式说明

    访问模式说明
    r只用于读取,默认模式。若文件不存在会报错。
    w只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。
    a只用于写入。文件存在则追加内容, 文件不存在,创建新文件。
    r+用于读写。文件不存在,会报错。
    w+用于读写。文件存在则先清空内容, 文件不存在,创建新文件。
    a+用于读写。文件存在则追加内容, 文件不存在,创建新文件。
    rb二进制格式的只读操作。
    wb二进制格式的只写操作。
    ab二进制格式的追加操作。
    • 只读方式打开文件

      • 只读方式打开文件,若文件不存在则会报错。
      # 'r',只读方式打开文件,若文件不存在则会报错
      f = open('fox.txt', 'r')
      
      f.close()
    • 只写方式打开文件

      • 只写方式打开文件,若文件不存在则会新建,若文件存在则会清空原文件内容
      # 'w',只写方式打开文件,若文件不存在则会新建,若文件存在则会清空原文件内容
      f = open('fox.txt', 'w')
      
      f.close()
    • 追加方式打开文件

      • 追加方式打开文件,若文件不存在则会新建,若文件存在则会将写光标则放在文件末尾,写数据直接写在文件末尾

        • 注意:追加方式打开文件,不会清空文件内容
      # 1. 'a',追加方式打开文件
      f = open('fox.txt', 'a')
      
      # 2. 写数据
      f.write('test_write')
      
      # 3. 关闭文件
      f.close()

    二、打开文件路径说明

    • open()函数的文件参数说明

      • open()第一个参数,实际上是路径+文件名
      • 路径主要分为:绝对路径相对路径
    • 绝对路径

      • 绝对路径:是指文件在硬盘上真正存在的路径,是电脑完整的路径
      • 一般而言,写程序很少使用到绝对路径,因为程序在本机运行可以找到这个绝对路径,但是,把程序拷贝给别人运行,别人电脑不一定有这个路径
    • 相对路径

      • 相对路径:相对于自己的目标文件位置

    0x03:文件相关操作

    一、文件重命名

    • os模块中rename()可以完成对文件的重命名操作
    • 语法格式:os.rename(旧的文件名,新的文件名)
    import os
    
    os.rename("七七の女装照.jpg", "七七の巫女照.jpg")

    二、删除文件

    • os模块中的remove()可以完成对文件的删除操作,不能删除文件夹
    • 语法格式:os.remove(文件名)
    import os
    
    os.remove("七七の美颜.jpg")

    三、创建文件夹

    • 创建文件夹,只能创建文件夹,不能创建普通文件
    • 语法格式:os.mkdir(文件夹名)
    import os
    
    os.mkdir("藤球のLolita")

    四、删除空文件夹

    • 删除文件夹,只能删除空的文件夹
    • 语法格式:os.rmdir(待删除文件夹的名字)
    import os
    
    os.rmdir("狐狸の秘密")

    五、获取当前目录

    • 获取当前工作的路径
    • 语法格式:路径变量 = os.getcwd()
    import os
    
    _path = os.getcwd()
    print(_path)

    六、改变默认目录

    • 改变默认目录,切换指定的路径
    • 语法格式:os.chdir(改变的路径)
    import os
    
    os.chdir("../")  # 切换到上一级路径

    七、获取目录列表

    • 获取某个目录的文件信息,获取文件夹或文件的名字
    • 语法格式:目录列表变量 = os.listdir(目录路径)

      • 如果不指定目录,默认当前路径
    import os
    
    file_list = os.listdir()  # 获取当前目录下的文件信息
    print(file_list)

    八、判断文件是否存在

    • 语法格式:os.path.exists(需要判断的文件)

      • 如果文件存在返回True,如果文件不存在返回False
    import os
    
    _isfile = os.path.exists("苏苏の宝贝")
    print(_isfile)

    九、字符串与容器类型相互转换

    函数说明
    str(容器变量)将 容器变量 转换为一个字符串
    eval(字符串内容)佛系函数,将传入的字符串内容,按格式转换为对应的容器类型。
    Last modification:August 3rd, 2020 at 05:14 pm
    If you think my article is useful to you, please feel free to appreciate