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

文件操作

一、数据持久化

1.计算机存储数据

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

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

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

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

3.文件操作

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

    a.打开文件

    open(file, mode='r', *, encoding=None)
    以指定方式打开指定文件,返回一个文件对象
    
    参数解释:
    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))    # <class 'str'>
    
    # ======b对应类型是二进制======
    f = open('./files/abc.txt', 'rb')
    result = f.read()
    print(type(result))    # <class 'bytes'>
    
    # 文件不存在时写
    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()
    
  • 文件读写操作

    a.文件读操作:

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

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

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

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

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

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

    文件对象.close()

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

二、数据持久化步骤

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()

猜你喜欢

转载自blog.csdn.net/simple_daytime/article/details/126199883