Chapter 17 Python文件操作(下)

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!


前言

Python作为一种高效且易于学习的编程语言,提供了一系列强大的文件操作功能,使得用户能够轻松地实现文件的读取、写入和管理。本章将详细讲解文件的写入以及追加操作。


本篇文章参考:黑马程序员

一、文件的写入

写入文件使用open函数的”w”模式进行写入,常用的方法有以下两种:

  • wirte():写入内容
  • flush():刷新内容到硬盘中

注意

  • w模式:当文件不存在时会创建新文件
  • w模式:当文件存在时会清空原有内容
# 打开文件
# 如果文件不存在,“w”模式会帮我们创建文件
f=open("D:/test.txt","w",encoding="UTF-8")
f.write("Hello World!")   #内容写入到内存中(即缓冲区中)
# 使程序暂停 500000 秒(约139小时),在此期间程序不会执行任何其他操作。
time.sleep(500000)

双击打开test.txt文本文件,发现内容为空。
在这里插入图片描述
这是因为直接调用write方法,内容并未真正写入文件,而是会积攒在程序的内存中(即缓冲区中)。

  • 缓冲区: 在写入文件时,数据可能被保留在缓冲区中,而不是立即写入磁盘
  • 刷新机制: 当调用close 方法或程序结束时,缓冲区的内容会被自动写入文件
  • 手动刷新: 如果需要在不关闭文件的情况下强制将缓冲区的内容写入磁盘,可以手动调用flush方法

在这里插入图片描述

这种设计可将数据暂时存储在缓冲区,减少对硬盘的写入次数,提高性能。

# 打开文件
f=open("D:/test.txt","w",encoding="UTF-8")
f.write("Hello World!")   #内容写入到内存中
# flush刷新
f.flush()   #将内存中积攒的内容,写入到硬盘文件中
time.sleep(500000)

双击打开test.txt文本文件,内容为“Hello World!”。
在这里插入图片描述
除此之外,close方法内置了flush方法的功能。

# 打开文件
f=open("D:/test.txt","w",encoding="UTF-8")
f.write("Hello World!")   #内容写入到内存中
# 关闭文件
f.close()   # close方法,内置了flush功能

双击打开test.txt文本文件,内容为“Hello World!”。
在这里插入图片描述

# 打开文件
f=open("D:/test.txt","w",encoding="UTF-8")
f.write("Hello World!")

但是我们在实践的过程中会发现,编写如上代码,没有调用flush方法也没有调用close方法,但是运行后双击打开test.txt还是会有"Hello World!"的内容。
在这里插入图片描述
这是因为如果 Python 程序正常结束,操作系统通常会在程序退出时自动刷新未写入的数据到文件

二、文件的追加

追加写入文件使用open函数的”a”模式进行追加,常用的方法有以下两种:

  • wirte():写入内容
  • flush():刷新内容到硬盘中

注意

  • a模式:当文件不存在时会创建新文件
  • a模式:当文件存在时会在原有内容后面继续写入
  • 可使用\n实现换行
# 打开文件
f=open("D:/test.txt","a",encoding="UTF-8")
# write写入
f.write("Hello python!")

# 换行写入
f.write("\nHello everyone!")

# close关闭
f.close()

双击打开test.txt文本文件,内容如下:
在这里插入图片描述

【例题】
有一份账单文件,记录了消费收入的具体记录,内容如下:
name  date  money type remarks
小周,2022-01-01,100000,消费,正式
小周,2022-01-02,300000,收入,正式
小周,2022-01-03,100000,消费,测试
小林,2022-01-01,300000,收入,正式
小林,2022-01-02,100000,消费,测试
小林,2022-01-03,100000,消费,正式
小林,2022-01-04,100000,消费,测试
小林,2022-01-05,500000,收入,正式
小张,2022-01-01,100000,消费,正式
小张,2022-01-02,500000,收入,正式
小张,2022-01-03,900000,收入,测试
小王,2022-01-01,500000,消费,正式
小王,2022-01-02,300000,消费,测试
小王,2022-01-03,950000,收入,正式
小刘,2022-01-01,300000,消费,测试
小刘,2022-01-02,100000,消费,正式
小刘,2022-01-03,300000,消费,正式
请将以上内容复制并保存为 bill.txt文件并满足以下要求:
1.读取文件;
2.将文件内标记为测试的数据行丢弃;
3.将文件写出到bill.txt.bak文件作为备份’

# 打开文件得到文件对象,准备读取
fr= open("D:/bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw= open("D:/bill.txt.bak", "w", encoding="UTF-8")
# for循坏读取文件
for line in fr:
    # 通过strip方法去除换行符
    line=line.strip()
    # 通过split方法按逗号切分,通过下标[4]得到remarks的内容
    if line.split(",")[4]=="测试":
        continue   #进入下一次循坏,后面的内容跳过
    # 将内容写出去
    fw.write(line)
    # 由于前面对内容进行了strip()的操作去除了换行符
    # 所以要手动加上换行符
    fw.write("\n")

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

运行后双击打开bill.txt.bak文件,文件内容如下:
在这里插入图片描述

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值