day13 课程(文件操作 & r|w|a & read & readlines & readline & seek)

课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=244

13.1 了解文件操作

13.1.1 目标

  文件操作的作用

  文件的基本操作

    打开

    读写

    关闭

  文件备份

  文件和文件夹的操作

13.1.2 文件操作的作用

思考:文件操作包括什么?

答:打开、关闭、读、写、复制...

思考:文件操作的作用是什么?

答:读取内容、写入内容、备份内容...

总结:文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力

13.2 体验文件操作步骤

13.2.1 文件操作步骤

  1.打开文件

  2.读写等操作

  3.关闭文件:不关闭,将一直打开文件,占用内存

注意:可以只打开和关闭文件,不进行任何读写操作

13.2.2 打开

在 Python ,使用 open 函数,可以打开一个已经存在的文件或者创建一个新文件

# 语法
open(name, mode)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

mode:设置打开文件的模式(访问模式):只读、写入、追加等

13.2.3 体验文件操作

# 1.打开
f = open("test.tst", "w")

# 2.写入
f.write("aaa")

# 3.关闭
f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\01.体验文件操作步骤.py 

Process finished with exit code 0

13.2.4 执行过程

image

13.3 访问模式特点01

模式 描述
r 只读方式打开文件,文件的指针将会放在文件的开头,这是默认模式
rb 以二进制格式打开一个文件用于只读,文件指针将会放在放在文件的开头,这是默认模式
r+ 打开一个文件用于读写,文件指针将会放在文件的开头
rb+ 以二进制格式打开一个文件用于读写,文件指针将会放在的开头
w

打开一个文件只用于写入,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件

wb 以二进制格式打开一个文件只用于写入,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
w+ 打开一个文件用于读写,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
wb+ 以二进制格式打开一个文件用于读写,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
a

打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,也就是说,新的内容将会被写入到已有内容之后,如果文件不存在,创建新文件进行写入

ab 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,也就是说,新的内容将会被写入到已有内容之后,如果该文件不存在,创建新文件进行写入
a+ 打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾,文件打开时会是追加模式,如果文件不存在,创建新文件用于读写
ab+ 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,如果该文件不存在,创建新文件用于读写

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# r 如果文件不存在 报错. 不支持写入操作,表示只读
# f = open("test.txt","r")  # 文件上一节创建过, 因此文件存在, 不报错
# f.close()

# f = open("test1.txt","r")  # 文件不存在 报错:FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt'
# f.close()

# f = open("test.txt","r")  # r 只读不支持写入 报错:io.UnsupportedOperation: not writable
# f.write("aa")
# f.close()


# w 文件不存在,新建.  执行写入,会覆盖原文件
# f = open("1.txt", "w")  # 文件不存在 新建了文件
# f.close()

# f = open("1.txt", "w")  # 文件不存在 新建了文件
# f.write("bbb")  # 原文件中有 aaa 内容,执行以后,内容只剩下 bbb, 覆盖了原文件内容
# f.close()


# a 追加 文件不存在,新建. 执行追加,在原有内容基础上,追加新内容
# f = open("2.txt", "a")  # 文件不存在 新建了文件
# f.close()

# f = open("2.txt","a")  # 文件不存在 新建了文件
# f.write("xyz")  # 当原文件中有 abc 内容, 执行以后 内容变成 abcxyz
# f.close()


# 访问模式参数可以省略, 如果省略表示访问模式为 r
# f = open('3.txt')
# f.close()

13.4 读取函数之 read

# 语法
文件对象.read(num)  # num 参数可选

num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num ,那么就表示读取文件中所有的数据

# 创建一个 test.txt 文件
aaaaa
bbbbb
ccccc
ddddd
eeeee
f = open("test.txt","r")
# print(f.read())  # read 不写参数, 表示读取所有
print(f.read(10))  # 10个字节数据, 计算机底层 换行是 \n 字符, 所以显示 10 个字节 aaaaa\nbbbb
f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day13\03.读取函数之 read.py" 
aaaaa
bbbb

Process finished with exit code 0

13.5 读取函数之 readlines

readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

f = open("test.txt", "r")
print(f.readlines())  # 按行读取, 返回列表, 每行数据为列表中的一个元素, 连带\n 一并读取
f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day13\04.读取函数之 readlines.py" 
['aaaaa\n', 'bbbbb\n', 'ccccc\n', 'ddddd\n', 'eeeee']

Process finished with exit code 0

13.6 读取函数之 readline

readline 一次读取一行内容

f = open("test.txt")

print(f.readline())  # 这里 aaaaa 为一行, 直接输出一行内容, print 输出 end='\n' 所以有个空行
print("----------")
print(f.readline())
print("----------")
print(f.readline())

f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe "D:\Pycharm\code\day13\05.读取函数之 readline.py" 
aaaaa

----------
bbbbb

----------
ccccc


Process finished with exit code 0

13.7 访问模式特点02

r、rb、r+、rb+ :读、二进制读、读写、二进制读写(遵循主模式 r,文件不存在会报错,文件指针都在开头)

w、wb、w+、wb+:写、二进制写、读写、二进制读写(遵循主模式 w,文件不存在会新建文件,文件指针都在开头)

a、ab、a+、ab+:追加、二进制追加、追加写入、二进制追加写入(遵循主模式 a,文件不存在会新建文件,文件指针都在结尾)

带 b二进制格式+可读可写

13.8 访问模式特点02之代码测试

# f1 = open("test.txt", "r+")  # 存在文件,没有报错
# f1.close()
# f2 = open("test1.txt", "r+")  # 不存在文件,报错:FileNotFoundError: [Errno 2] No such file or directory: 'test1.txt'
# f2.close()

# f3 = open("test.txt","r+")  # 文件指针在开头, 能读取出来数据
# print(f3.read())
# f3.close()

# f4 = open("test1.txt","w+")  # 文件不存在, 但新建了文件 test1.txt
# print(f4.read())
# f4.close()

# f5 = open("test.txt","w+")  # 文件存在, 文件指针也在开头, 但读取不出来数据, 因为 w 会用新内容覆盖原内容, 新内容写入空
# print(f5.read())
# f5.close()

# f6 = open("test2.txt","a+")  # 文件不存在, 但新建了文件 test2.txt
# print(f6.read())
# f6.close()

# 此操作需要再将上面 test.txt数据内容 复制到 test.txt 文件
# f7 = open("test.txt","a+")  # 文件存在,文件指针在结尾, 所以结尾向后读取不出来数据
# print(f7.read())
# f7.close()

13.9 seek函数

作用:用来移动文件指针

# 语法
文件对象.seek(偏移量, 起始位置)

起始位置:

  0:文件开头

  1:当前位置

  2:文件结尾

# f1 = open("test.txt","r+")
# print(f1.read())  # 全部打印 aaaaa 开始
# f1.seek(2, 0)  # 0 或 1 都可以,r 模式默认就是开头, 向后偏移量 2 个
# print(f1.read())  # 打印 aaa , 因为 偏移量是 2, 前面 aa 被文件指针偏移
# f1.close()

# f2 = open("test.txt","r+")
# f2.seek(0, 2)  # 文件指针偏移到结尾
# print(f2.read())  # 即使是 r模式也不打印, 因为指针被偏移到结尾,读取结尾后 也没有数据
# f2.close()


# f3 = open("test.txt","a+")
# f3.seek(0, 0)  # 文件指针偏移到开头 也可写 seek(0)
# print(f3.read())  # 即使是 a模式也能打印, 因为指针被偏移到开头,从开头开始读取数据
# f3.close()

13.10 文件备份的作用

程序员每天与数据打交道,要保证数据的安全性所以需要对重要文件进行备份

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能( 备份文件名为 xx[备份]后缀,例如 test[备份].txt )

13.11 文件备份思路分析

  1.接收用户输入的文件名

  2.规划备份文件名

  3.备份文件写入数据 (1)打开文件 (2)写入文件 (3)关闭文件

13.12 文件备份之接收用户输入

# 1.用户输入目标文件
old_name = input("请输入您要备份的文件名:")
print(old_name)  # 后面辅助
print(type(old_name))  # 后面辅助

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\08.文件备份之接收用户输入.py 
请输入您要备份的文件名:1.txt
1.txt
<class 'str'>

Process finished with exit code 0

13.13 文件备份之规划文件名

# 1.用户输入目标文件
old_name = input("请输入您要备份的文件名:")
# print(old_name)  # 后面辅助
# print(type(old_name))  # 后面辅助

# 2.规划备份文件名的名字
# 2.1 提取目标文件后缀
index = old_name.rfind('.')  # 从后往前, 找到. 后缀时的下标
# 2.2 组织备份的文件名, xx[备份]后缀
# print(old_name[:index])  # . 前缀
# print(old_name[index:])  # . 后缀
new_name = old_name[:index] + '[备份]' + old_name[index:]

print(new_name)

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\09.文件备份之规划文件名.py 
请输入您要备份的文件名:111.txt
111[备份].txt

Process finished with exit code 0

13.14 文件备份之数据写入

 

 

------------------------------------------------ 执行后

 

13.15 文件备份之限制有效文件备份

 

------------------------------------------------ 执行后

 

13.16 文件操作函数

 

------------------------------------------------ 执行后

 

13.17 文件夹操作函数之创建和删除

 

 

------------------------------------------------ 执行后

 

13.18 文件夹操作函数之路径相关函数

 

------------------------------------------------ 执行后

 

13.19 文件夹操作函数之rename

 

------------------------------------------------ 执行后

 

13.20 批量重命名之添加字符串

 

------------------------------------------------ 执行后

 

13.21 批量重命名之添加和删除字符串

 

------------------------------------------------ 执行后

 

13.22 文件总结

 

 

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2025-09-29 08:47  马俊南  阅读(6)  评论(0)    收藏  举报