外观
7. 文件操作
约 1187 字大约 4 分钟
2025-03-31
文件的读取
open 打开函数
在 Python,使用 open 函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下 open(name, mode, encoding)
- name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
- mode:设置打开文件的模式(访问模式):只读、写入、追加等。
- encoding:编码格式(推荐使用UTF-8)
示例代码:
f = open('python.txt', 'r', encoding=”UTF-8)
# encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
注意:此时的f
是open
函数的文件对象,对象是 Python 中一种特殊的数据类型,拥有属性和方法,可以使用对象.属性
或对象.方法
对其进行访问,后续面向对象课程会给大家进行详细的介绍。
mode常用的三种基础访问模式
读操作相关方法
read 方法
f = open("D:/测试.txt", "r", encoding="UTF-8")
print(type(f))
# 读取文件 - read()
print(f"读取10个字节的结果:{f.read(10)}")
print(f"read方法读取全部内容的结果是:{f.read()}")
readlines 方法
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
f = open("D:/测试.txt", "r", encoding="UTF-8")
# 读取文件 - readLines()
lines = f.readlines() # 读取文件的全部行,封装到列表中
print(f"lines对象的类型:{type(lines)}")
print(f"lines对象的内容是:{lines}")
readline 方法
一次读取一行内容
f = open("D:/测试.txt", "r", encoding="UTF-8")
# 读取文件 - readline()line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")
for 循环读取文件行
每一个line临时变量,就记录了文件的一行数据
f = open("D:/测试.txt", "r", encoding="UTF-8")
# for循环读取文件行
for line in f:
print(f"每一行数据是:{line}")
close 关闭文件对象
最后通过close,关闭文件对象,也就是关闭对文件的占用 如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用。
f = open("D:/测试.txt", "r", encoding="UTF-8")
# 文件的关闭
f.close()
time.sleep(500000)
with open 语法
通过在with open的语句块中对文件进行操作 可以在操作完成后自动关闭close文件,避免遗忘掉close方法
# with open 语法操作文件
with open("D:/测试.txt", "r", encoding="UTF-8") as f:
for line in f:
print(f"每一行数据是:{line}")
time.sleep(500000)
文件的写入
f = open("D:/test.txt", "w", encoding="UTF-8")
# write写入
f.write("Hello World!!!") # 内容写入到内存中
# flush刷新
f.flush() # 将内存中积攒的内容,写入到硬盘的文件中
# close关闭
f.close() # close方法,内置了flush的功能的
# 打开一个存在的文件
f = open("D:/test.txt", "w", encoding="UTF-8")
# write写入、flush刷新
f.write("黑马程序员")
# close关闭
f.close()
注意:
- 直接调用
write
,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区 - 当调用
flush
的时候,内容会真正写入文件 - 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)
- 文件如果不存在,使用
”w”
模式,会创建新文件 - 文件如果存在,使用
”w”
模式,会将原有内容清空
文件的追加
# 打开文件,不存在的文件
f = open("D:/test.txt", "a", encoding="UTF-8")
# write写入
f.write("黑马程序员")
# flush刷新
f.flush()
# close关闭
f.close()
# 打开一个存在的文件
f = open("D:/test.txt", "a", encoding="UTF-8")
# write写入、flush刷新
f.write("\n月薪过万")
# close关闭
f.close()
注意:
- a 模式,文件不存在会创建文件
- a 模式,文件存在会在最后,追加写入文件
文件操作综合案例
"""
演示文件操作综合案例:文件备份
"""
# 打开文件得到文件对象,准备读取
fr = open("D:/bill.txt", "r", encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("D:/bill.txt.bak", "w", encoding="UTF-8")
# for循环读取文件
for line in fr:
line = line.strip()
# 判断内容,将满足的内容写出
if line.split(",")[4] == "测试":
continue # continue进入下一次循环,这一次后面的内容就跳过了
# 将内容写出去
fw.write(line)
# 由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fw.write("\n")
# close2个文件对象
fr.close()
fw.close() # 写出文件调用close()会自动flush()