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

课程: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 文件备份之数据写入

# 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)

# 3.备份文件写入数据
# 3.1 打开源文件读取数据 和 备份文件写入数据
old_f = open(old_name, "rb+")  # 打开原文件,计算机底层都是以二进制存储, 以二进制读取, 都能读取
new_f = open(new_name, "wb+")  # 打开新文件以二进制写,w 文件不存在自动创建

# 3.2 将源文件数据写入备份文件, 如果不确定目标文件大小, 循环读取写入
while True:
    con = old_f.read(1024)  # 每次读取1024字节长度
    if len(con) == 0:  # 当读取完成终止循环
        break
    new_f.write(con)

# 3.3 关闭文件
old_f.close()
new_f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\10.文件备份之数据写入.py 
请输入您要备份的文件名:test.txt

Process finished with exit code 0

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

如果用户输入 .txt,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?

答:添加条件判断既可

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

# 2.规划备份文件名的名字
# 2.1 提取目标文件后缀
index = old_name.rfind('.')  # 从后往前, 找到. 后缀时的下标
# 有效名字才判断
if index > 0:  # .txt index 会等于 0
    postfix = old_name[:index]
# 2.2 组织备份的文件名, xx[备份]后缀
# print(old_name[:index])  # . 前缀
# print(old_name[index:])  # . 后缀
# new_name = old_name[:index] + '[备份]' + old_name[index:]
new_name = old_name[:index] + '[备份]' + postfix  # 前面判断不成立 postfix 变量没有被赋值, 会报错
# print(new_name)

# 3.备份文件写入数据
# 3.1 打开源文件读取数据 和 备份文件写入数据
old_f = open(old_name, "rb+")  # 打开原文件,计算机底层都是以二进制存储, 以二进制读取, 都能读取
new_f = open(new_name, "wb+")  # 打开新文件以二进制写,w 文件不存在自动创建

# 3.2 将源文件数据写入备份文件, 如果不确定目标文件大小, 循环读取写入
while True:
    con = old_f.read(1024)  # 每次读取1024字节长度
    if len(con) == 0:  # 当读取完成终止循环
        break
    new_f.write(con)

# 3.3 关闭文件
old_f.close()
new_f.close()

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\10.文件备份之数据写入.py 
请输入您要备份的文件名:.txt
Traceback (most recent call last):
  File "D:\Pycharm\code\day13\10.文件备份之数据写入.py", line 21, in <module>
    new_name = old_name[:index] + '[备份]' + postfix
                                             ^^^^^^^
NameError: name 'postfix' is not defined

Process finished with exit code 1

13.16 文件操作函数

13.16.1 语法

在 Python 中文件和文件夹的操作要借助 os模块(operate system)里面的相关功能,具体步骤如下:

# 1.导入 os模块
import os
# 2.使用 os模块 相关功能
os.函数名()

13.16.2 文件重命名

import os  # 导入模块os

# 文件重命名
os.rename("1.txt", "10.txt")

13.16.3 删除文件

import os

# 删除文件
os.remove("10.txt")  # 删除文件
os.remove("10.txt")  # 再次删除 报错:FileNotFoundError: [WinError 2] 系统找不到指定的文件。: '10.txt'

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

13.17.1 创建

import os

os.mkdir("aa")  # 创建文件夹 aa
os.mkdir("aa")  # 再次创建时, 报错:FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'aa'

13.17.2 删除

import os

os.rmdir("aa")  # 删除文件夹 aa
os.rmdir("aa")  # 再次删除文件夹 aa 时, 报错: FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'aa'

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

import os

# 1.获取路径 getcwd()
print(os.getcwd())  # 返回当前文件的目录路径

# 2.改变目录路径 chdir()
# 需求: 在 aa 里面创建 bb 文件夹 1.切换目录到aa 2.创建bb
os.mkdir("aa")
os.chdir("aa")  # 切换路径到 aa 目录下
os.mkdir("bb")
print(os.getcwd())

# 3.获取目录列表
print(os.listdir())  # 获取当前所有的文件名, 返回列表
print(os.listdir("aa"))  # 获取 aa 目录下的文件名列表

------------------------------------------------ 执行后
C:\Users\马俊南\AppData\Local\Microsoft\WindowsApps\python3.13.exe D:\Pycharm\code\day13\14.文件夹操作函数之路径相关函数.py 
D:\Pycharm\code\day13
['01.体验文件操作步骤.py', '02.访问模式特点01.py', '03.读取函数之 read.py', '04.读取函数之 readlines.py', '05.读取函数之 readline.py', '06.访问模式特点02之代码测试.py', '07.seek函数.py', '08.文件备份之接收用户输入.py', '09.文件备份之规划文件名.py', '10.文件备份之数据写入.py', '11.文件重命名.py', '12.删除文件.py', '13.文件夹操作函数之创建和删除.py', '14.文件夹操作函数之路径相关函数.py', '2.txt', 'aa', 'test.txt', 'test1.txt', 'test2.txt', 'test[备份].txt']
['bb']

Process finished with exit code 0

13.19 文件夹操作函数之rename

import os

# or.rename("目标文件名", "新文件名")
os.rename("aa","aaaa")

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

需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串

步骤:

  1.设置添加删除字符串的标识

  2.获取指定目录的所有文件

  3.将原文件名添加、删除指定字符串,构造新名字

  4.os.rename() 重命名

import os

# 1.获取当前目录下所有文件名
file_list = os.listdir()  # 可以接固定路径

# 2.构造文件名
for i in file_list:
    # 2.1 新文件名表头
    new_name = 'Python_' + i
    # 2.2 重命名
    os.rename(i, new_name)

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

import os

# 构造条件的数据
flag = 2

# 1.获取当前目录下所有文件名
file_list = os.listdir()  # 可以接固定路径

# 2.构造文件名
for i in file_list:
    if flag == 1:
        # 2.1 新文件名表头前缀
        new_name = 'Python_' + i
    elif flag == 2:
        # 2.3 删除的前缀
        num = len("Python_")  # 计算出前缀位数
        new_name = i[num:]  # 对文件名从第几位开始切割 跃过 Python_ 的位数

    # 2.2 重命名
    os.rename(i, new_name)

13.22 文件总结

1.文件操作步骤

  (1)打开

文件对象 = open(目标文件, 访问模式)

  (2)操作

    读

文件对象.read()  # 写参数则读参数长度,不写参数读所有
文件对象.readlines()  # 以行为单位读文件所有内容
文件对象.readline()  # 一次读一行

    写

文件对象.write()  # 参数传写入内容

    文件指针

文件对象.seek(偏移量, 位置)  # 0 开头位置、 1 当前位置、 2 结尾位置

  (3)关闭

文件对象.close()

2.主访问模式

  r : 读,文件不存在则报错

  w :写,文件不存在则新建该文件

  a : 追加

3.文件和文件夹操作(import os)

  重命名:os.rename()

  获取当前目录:os.getcwd()

  获取目录列表:os.listdir()

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

                                                                                                                         无敌小马爱学习

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