python基础----06-----文件读写追加操作

2023-11-04

一 文件编码概念

思考:计算机只能识别: 0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?
答案:使用编码技术(密码本)将内容翻译成0和1存入。

在这里插入图片描述

常见编码有UTF8,gbk等等。不同的编码,将内容翻译成不同的二进制。

二 文件的操作

2.1 open函数

open(namme, mode, encoding)
'''
open作用:创建或者打开一个文件。文件不存在时会创建,存在时则打开。
参数name:要创建或者打开的文件路径。
参数mode:要打开文件的模式。可以是r,w,a,即依次是只读,只写,追加。
参数encoding:以何种编码格式打开文件。
'''

在这里插入图片描述

mode常用的三种基础访问模式:
在这里插入图片描述

2.2 读操作相关方法

读操作相关方法:主要有read和readlines方法。
在这里插入图片描述

2.2.1 测试读文件操作

先把以下内容保存到”测试.txt“中。

你是谁,我是预言家,请不要把我投出局
这把游戏我验到3号是狼人,大家请相信我,
一起把3号投出去。

测试:read()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")
    # f是一个文件对象
    print(type(f))  #<class '_io.TextIOWrapper'>

    # 读取文件-read
    print(f"读取10个字节的结果:{f.read(10)}")
    # 这里讲错了,open创建对象分字符和字节的,以字符方式打开文件时,num表示字符数,否则utf-8里常见汉字一个3byte
    print(f"读取10个字节的结果:{f.read(4)}")
    print(f"读取10个字节的结果:{f.read()}")

    # 关闭文件
    f.close()

结果:
在这里插入图片描述

测试:readlines()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件 - readLines()
    lines = f.readlines()
    # 读取文件的全部行,封装到列表中
    print(f"lines对象的类型: {type(lines)}") #<class 'list'>
    print(f"lines对象的内容是: {lines}") #这次就可以了   \n是换行符

    # 关闭文件
    f.close()

结果:
在这里插入图片描述

测试:readline()。

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件- readline()
    line1 = f.readline()
    line2 = f.readline()
    line3 = f.readline()
    print(f"第一行数据是:{line1}")
    print(f"第二行数据是:{line2}")
    print(f"第三行数据是:{line3}")

    f.close()

结果:
在这里插入图片描述

for循环读取:

if __name__ == '__main__':
    # 打开文件
    f = open("测试.txt", "r", encoding="UTF-8")

    # 读取文件- readline()
    # for循环读取文件行
    for line in f:
        print(f"每一行数据是:{line}")

    f.close()

在这里插入图片描述

2.2.2 为什么要关闭文件?

在这里插入图片描述

利用with open语句 自动运行close 以免忘写.

if __name__ == '__main__':
    # with open 语法操作文件
    with open("测试.txt", "r", encoding = "UTF-8") as f:
        for line in f:
            print(f"每一行数据是: {line}")

在这里插入图片描述

2.2.3 文件读操作汇总

在这里插入图片描述

2.2.4 文件读取练习-统计文件中某个单次的出现个数

在”word.txt“输入内容:

guangzhou shenzhen jiangmen
suzhou hangzhou wuhan
hanzhou guangzhou ningbo
guangzhou changshan xiamen

我们统计guangzhou的单次出现个数。

if __name__ == '__main__':
    f = open("word.txt", "r", encoding="UTF-8")
    nums = 0
    for line in f:
        nums += line.count("guangzhou")

    print("里面有 ", nums, " 个guangzhou")

在这里插入图片描述

2.3 文件的写出操作

在这里插入图片描述
注意,上图f.flush()之后仍要f.close()关闭文件。
并且,如果文件存在,将会把文件内部的内容清空,在文件开头重新写入。

if __name__ == '__main__':

    f = open("123.txt", "w", encoding="UTF-8")#当文件不存在时。它会给我自动创建
    # write写入
    f.write("Helloworld!")
    
    # flush刷新
    f.flush()
    
    # close内置了flush的功能,所以当内容不急着写入磁盘时,可以不调用flush,让close()进行处理.
    f.close()
    

得到123.txt,内容:
在这里插入图片描述

2.4 文件的追加写入操作

在这里插入图片描述
注意,上图f.flush()之后仍要f.close()关闭文件。

if __name__ == '__main__':

    f = open("123.txt", "a", encoding="UTF-8")#当文件不存在时。它会给我自动创建
    # write写入
    f.write("我是追加的内容")

    # flush刷新
    f.flush()

    # close内置了flush的功能
    f.close()

结果:
在这里插入图片描述

文件不存在时,追加模式(a)同样自动创建文件,这里就不演示了。

2.5 文件的综合案例

有一份账单文件,记录了消费收入的具体记录,内容如下:

name,date,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,100000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
刘德滑,2022-01-01,100000,消费,正式
刘德滑,2022-01-02,100000,消费,测试
刘德滑,2022-01-03,100000,消费,正式

先将上面账单内容保存到文件bill.txt。

需求(下图的需求可能有点不清晰,这里整理一下表达):将bill.txt的内容备份到bill.txt.bak,并且备份的时候,我们把测试的内容丢弃,不能写入到bill.txt.bak里面。
在这里插入图片描述

if __name__ == '__main__':

    f = open("bill.txt", "r", encoding="UTF-8")
    fw = open("bill.txt.bak", "a", encoding="UTF-8")
    for line in f:
        line = line.strip()# 去掉开头结尾的换行符
        split_list = line.split(",")
        if split_list[-1] == "测试":
            continue

        fw.write(line)
        fw.write("\n")# 补上换行符,因为上面line.strip()去掉了.

    # 关闭文件
    f.close()
    fw.close()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python基础----06-----文件读写追加操作 的相关文章

随机推荐