第八章 Python文件操作

8.1 文件的编码

思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?
答案:使用编码技术(密码本)将内容翻译成0和1存入。
编码技术即翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。计算机中有许多可用编码:UTF-8,GBK,Big5等,不同的编码,将内容翻译成二进制也是不同的。
编码有许多,所以要使用正确的编码,才能对文件进行正确的读写操作呢。UTF-8是目前全球通用的编码格式,除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。
在这里插入图片描述

8.2 文件的读取

1、什么是文件

在这里插入图片描述

2、文件操作

在日常生活中,文件操作主要包括打开、关闭、读、写等操作。我们平常对文件的基本操作,大概可以分为三个步骤:打开文件、读写文件、关闭文件。

(1)open()打开函数

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

(2)读操作的相关方法

在这里插入图片描述

f = open("D:/测试.txt", 'r', encoding="UTF-8")
content = f.read(10)
print(content)  # 这是一个测试文件,这
f = open("D:/测试.txt", 'r', encoding="UTF-8")
content = f.read()
print(content)  
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件
# 这是一个测试文件,这是一个测试文件

在这里插入图片描述

f = open("D:/测试文件.txt", 'r', encoding="UTF-8")
content = f.readlines()
print(f"content的类型是{type(content)}")  # content的类型是<class 'list'>
print(content)  # ['itheima,itcast\n', '黑马程序员,传智播客']

在这里插入图片描述

f = open("D:/测试文件.txt", 'r', encoding="UTF-8")
content = f.read(10)
line1 = f.readline()
line2 = f.readline()
print(content)
print(f"第一行{line1}")
print(f"第二行{line2}")
# 运行结果
# itheima,it
# 第一行cast

# 第二行黑马程序员,传智播客

在这里插入图片描述

f = open("D:/测试文件.txt", 'r', encoding="UTF-8")
for line in f:
    print(line)
# 运行结果
# itheima,itcast
#
# 黑马程序员,传智播客

(3)关闭文件对象

在这里插入图片描述

import time

f = open("D:/测试文件.txt", 'r', encoding="UTF-8")
time.sleep(50000)  # 程序睡眠5000秒,未停止运行,此时不能对测试文件.txt进行删除、重命名操作
f.close()  # 关闭文件对象

在这里插入图片描述

import time

with open("D:/测试文件.txt", 'r', encoding="UTF-8") as f:
    content = f.readlines()
    print(content)  # ['itheima,itcast\n', '黑马程序员,传智播客']
time.sleep(50000)  # 尽管程序正在运行,但此时上面代码已自动关闭文件对象,因此可以对文件进行删除和重命名操作

(4)操作汇总

在这里插入图片描述

(5)总结

在这里插入图片描述

(6)课后练习:单词计数

在这里插入图片描述

# 方法一:读取全部内容,通过字符串的count方法统计itheima的单词数量
f = open("D:/word.txt", "r", encoding="UTF-8")
content = f.read()
num = content.count("itheima")
print(f"word.txt文件中itheima出现的次数是{num}次")
# 方法二:读取内容,一行一行读取
f = open("D:/word.txt", "r", encoding="UTF-8")
num = 0
for line in f:
    line = line.strip()  # 去除后面的换行符,注意千万要再把新得到的字符串赋值给line
    list = line.split(" ")
    for target in list:
        if target == "itheima":
            num += 1
print(f"word.txt文件中itheima出现的次数是{num}次")
# 方法三:与方法二原理相同
f = open("D:/word.txt", "r", encoding="UTF-8")
lines = f.readlines()
num = 0
for line in lines:
    line = line.strip()  # 去除后面的换行符,注意千万要再把新得到的字符串赋值给line
    list = line.split(" ")
    for target in list:
        if target == "itheima":
            num += 1
print(f"word.txt文件中itheima出现的次数是{num}次")

8.3 文件的写入

1、写操作快速入门

f1 = open("D:/python.txt", "w", encoding="UTF-8")
f1.write("hello,world")
f1.flush()
import time

f1 = open("D:/python.txt", "w", encoding="UTF-8")
f1.write("hello,world")
# f1.flush()
time.sleep(60)  # 程序睡眠60s,此时未停止运行,打开python.txt会发现里面还未写入内容,如果前面写上f1.flush(),则运行到这时,内容已写入到文件

注意:

  • 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区
  • 当调用flush的时候,内容会真正写入文件
  • 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

2、写操作注意

  • 文件如果不存在,使用"w"模式,会创建新文件
  • 文件如果存在,使用"w"模式,会将原有内容清空

3、追加写入操作快速入门

f1 = open("D:/python.txt", "a", encoding="UTF-8")
f1.write("黑马程序员")
f1.write("\n月薪过万")
f1.flush()  # 内容刷新

注意:

  • a模式,文件不存在会创建文件
  • a模式,文件存在会在最后追加写入文件

8.4 文件操作综合案例

在这里插入图片描述
在这里插入图片描述

# 方法一
f1 = open("D:/bill.txt", "r", encoding="UTF-8")
f2 = open("D:/bill.txt.bak", "w", encoding="UTF-8")
for line in f1:
    if line.count("测试"):
        continue
    else:
        f2.write(line)
f1.close()
f2.close()

# 方法二
fr = open("D:/bill.txt", "r", encoding="UTF-8")
fw = open("D:/bill.txt.bak", "w", encoding="UTF-8")
for line in fr:
    line = line.strip()  # 去除每一行后面的换行符
    if line.split(",")[4] == "测试":
        continue  # 直接跳过下面的操作,进行下一轮循环
    fw.write(line)
    fw.write("\n")  # 由于前面已经去除了换行符,这里每一行后面要写一个换行符
fr.close()
fw.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持写博客的正

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值