• 基础语言-第15天-文件操作


    文件操作

    一、数据持久化

    1.计算机存储数据

    • 默认情况下程序中的数据是保存在运行内存中,当程序运行结束,在运行内存中保存的数据会自动销毁。如果这次运行程序想使用上一次运行程序产生的数据,就必须把数据保存在硬盘(磁盘)中。

    • 硬盘保存数据的最小单位:文件。

    2.数据持久化 - 将数据以文件形式保存在硬盘中

    • 文件操作将程序中的数据保存到文件中
    • 文件操作在程序中获取文件中的内容

    3.文件操作

    • 基本流程:打开文件 -> 文件读写操作 -> 关闭文件

      a.打开文件

      open(file, mode='r', *, encoding=None)
      以指定方式打开指定文件,返回一个文件对象
      
      • 1
      • 2
      参数解释:
      1file:需要打开的文件路径(可以写绝对路径或者相对路径)
               绝对路径:文件在计算机中的全路径
               相对路径(常用):在写文件路径时用'.'开头代表当前目录,'..'开头代表当前目录的上一目录
                       	  (当前目录指的是当前代码文件所在的文件夹)
                      	   注意:如果使用相对路径,被打开的文件必须放在工程中。
                             如果路径是以'./'开头的,'./'可以省略。
      # a.路径写法(路径要存在)
      # 绝对路径
      open(r'D:\Python-code+PyCharm项目\python\01语言基础\day15-文件操作\files\abc.txt')
      # 相对路径
      open('./files/abc.txt')    # '.'
      open('../day15-文件操作/files/abc.txt')    # '..'
      
      2)mode:文件打开方式,用来决定:打开文件之后能做什么(读or写)、操作文件时数据对应的类型(字符串or二进制)
             给mode赋值时需要两组值:
             第一组:决定打开之后能做什么对应的值
                r:只读;打开不存在的文件,会报错!
                w:只写:打开时会先清空原文件的内容;打开不存在的文件时会创建新的文件。
                a:只写:打开时不会先清空原文件的内容
             第二组:决定操作文件时数据的类型,默认是t
                t:字符串
                b:二进制(bytes)
             赋值的时候上面两组值每一组都必须选择一个(第二组值不选,相当于选的是't')
             rt(tr)、rb(br)、r 、wt、wb、w、at、ab、a
              
      # b.打开方法
      # ======r是只读======
      f = open('./files/abc.txt', 'r')
      f.read()
      f.write('123677')    # io.UnsupportedOperation: not writable
      
      # =======w是只写,并且会清空原文件======
      f = open('./files/abc.txt', 'w')    # 文件里的内容没了
      f.write('abdfd3dsss')
      f.read()    # io.UnsupportedOperation: not readable
      
      # ======a只写,不会清空原文件======
      f = open('./files/abc.txt', 'a')      # 文件里的内容还在
      f.write('123456')
      f.read()    # io.UnsupportedOperation: not readable
      
      # ======带t和不带t对应类型都是字符串======
      f = open('./files/abc.txt', 'rt')
      result = f.read()
      print(type(result))    # 
      
      # ======b对应类型是二进制======
      f = open('./files/abc.txt', 'rb')
      result = f.read()
      print(type(result))    # 
      
      # 文件不存在时写
      f = open('春晓.txt', 'wt', encoding='utf-8')
      f.write('\t春晓\t\n春眠不觉晓,\n处处闻啼鸟。\n夜来风雨声,\n花落知多少。')
      
      # 文件不存在时读:会报错
      f = open('./test.txt', 'rt')
      f.read()    # No such file or directory: './test.txt'
      
      3)encoding:文本文件编码方式(只有以t的方式打开文件时,才需要设置encoding)
        一般赋值为'utf-8', 'gbk'(也是一种常见的文件编码方式)
        	utf-8:文本数据在存储时,ASCII表中的符号用一个字节存储,一个中文用3个字节存储。可以对任何符号编码。
          gbk:文本数据在存储时,ASCII表中的符号用一个字节存储,一个中文用2个字节存储。可以对任何符号编码。除了ASCII表和中文外,不能对其他符号编码。
          使用编码值的原则:存储数据时使用编码值要和获取数据时对应的编码一致。
      
      # c.设置encoding
      f = open('files/students.txt', 'w', encoding='utf-8')
      f.write('acdMilo画画')
      
      f = open('files/students.txt', 'r', encoding='utf-8')
      print(f.read())    # acdMilo画画
      f.readline()
      f.readlines()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
    • 文件读写操作

      a.文件读操作:

      1)文件对象.read(): 获取整个文件的内容(从读写位置开始,读到文件结束。读写位置默认在文件开头,随着读操作的进行,读写的位置会不断改变)。

      2)文件对象.readline(): 获取一行内容(只能文本文件有效)

      3)文件对象.readlines(): 获取整个文件内容,返回一个列表,列表中的元素是每一行内容。(只能文本文件有效)

      # =====读操作====
      f = open('春晓.txt', 'r', encoding='utf-8')
      result1 = f.read()
      
      • 1
      • 2
      • 3

      b.文件写操作文件对象.write(数据):文件对象.writelines([])

      f = open('test.txt', 'a', encoding='utf-8')
      f.write('abc')
      
      • 1
      • 2
    • 关闭文件

      文件对象.close()

      f = open('春晓.txt', 'r', encoding='utf-8')
      result1 = f.read()
      # 关闭
      f.close()
      
      • 1
      • 2
      • 3
      • 4

    二、数据持久化步骤

    1.确定需要持久化的数据

    2.创建保存需要持久化数据的文件

    3.确定文件初始内容(需要持久化的数据的初始值)

    4.在程序中需要这个数据时从文件中获取这个数据

    5.在程序中修改数据后,必须将最新的数据写入文件。

    # 文件读写操作的应用
    # 案例:写程序打印程序运行次数
    # 1)确定需要持久化的数据 - 运行次数
    
    # 2)创建保存需要持久化数据的文件
    # runCount.txt
    
    # 3)确定文件初始内容(需要持久化的数据的初始值)
    # 0
    
    # 4)在程序中需要这个数据时从文件中获取这个数据
    f = open('files/runCount.txt', encoding='utf-8')
    count = int(f.read())
    f.close()
    
    count += 1
    print(count)
    
    # 5)在程序中修改数据后,必须将最新的数据写入文件。
    f = open('files/runCount.txt', 'w', encoding='utf-8')
    f.write(str(count))
    
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    新手炒外汇,如何防止炒外汇被坑?
    第九章 项目人力资源管理
    35 岁失业了真的会很难找到工作吗?
    Flutter笔记:GetX模块中不使用 Get.put 怎么办
    XSS攻击及防御(简单易懂)
    STM32实战项目——WIFI远程开关灯
    物联网入门
    五年数据库专家,带你深入高性能 MySQL 架构系统,不要等到面试再追悔莫及
    逻辑漏洞——权限类漏洞(水平权限、垂直权限)
    Neo4J安装
  • 原文地址:https://blog.csdn.net/simple_daytime/article/details/126199883