目录
一、文件的概念
1.1 什么是文件
1.2 文件操作具体内容
二、文件基本操作
2.1 open()函数打开文件
2.1.1基本语法
2.1.2属性解释
2.1.3 案例1
2.2 write()函数写入文件
2.3 close()函数写入文件
2.4 red(size)方法读取文件
三、文件和文件夹操作
3.1 os模块
3.1.1 导入os模块
3.1.2 调用相关方法
四、⭐⭐综合案例⭐⭐
4.1 第一次简单逻辑
4.2 发现问题
4.3 解决问题步骤
4.3.1 捋清思路
4.3.2 运用简单例子试错
4.3.3 编写代码
4.3.4 案例重要知识点———切片
一、文件的概念
1.1 什么是文件
内存中存放的数据在计算机关机后就会消失。要⻓久保存数据,就要使⽤硬盘、光盘、U 盘等设备。为了便于数据的管理和检索,引⼊了“⽂件”的概念。
1.2 文件操作具体内容
创建文件、打开文件、文件读写、文件备份!!!
二、文件基本操作
① 打开文件
② 读写文件
③ 关闭文件
2.1 open()函数打开文件
在Python,使⽤open()函数,
可以打开⼀个已经存在的文件,或者创建⼀个新文件。
2.1.1基本语法
f = open(name, mode)
#注:返回的结果是⼀个file⽂件对象
2.1.2属性解释
name:一般为
⽂件名
(可以包含
⽂件所在的具体路径
)。
mode:设置打开⽂件的模式(访问模式)。常用的为:
只读r、写⼊w、追加a
等



2.1.3 案例1
# 请编写Python代码,创建⼀个名为 output.txt 的⽂件
f1=open("output.txt",'w',encoding="UTF-8")
结果展示:

2.2 write()函数写入文件
基本语法:
f.write('要写⼊的内容,要求是⼀个字符串类型的数据')
2.3 close()函数写入文件
f.close()
2.4 red(size)方法读取文件
read(size)方法 :主要用于文本类型或者二进制文件(图片、音频、视频…)数据的读取
size表示要从文件中读取的数据的⻓度(单位是字符/字节),如果没有传入size,那么就表示读取文件 中所有的数据。
# 1、打开⽂件
f = open('python.txt', 'r', encoding='utf-8')
# 2、使⽤read()⽅法读取⽂件所有内容
contents = f.read()
print(contents)
# 3、关闭⽂件
f.close()
三、文件和文件夹操作
3.1 os模块
os模块是Python标准库,可直接导入使用。
3.1.1 导入os模块
import os
3.1.2 调用相关方法
(1)与⽂件操作相关⽅法:

(2)与⽂件夹操作相关操作:

四、⭐⭐综合案例⭐⭐
例:
# 校验1:判断用户输入是否有‘.’
# 校验2:判断用户输入的文件是否在目录中
# 如果校验通过,完成备份操作,否则给出相对于的提示
这一块主要是对文件操作进行训练,在这个案例中有几点需要注意
⚠️如何对文件进行正确操作
⚠️用户输入的文件名是否具有后缀?
⚠️如何对用户输入的文件名进行备份?
4.1 第一次简单逻辑
import os
file_name = input("请输入您需要备份的文件:")
index = file_name.find(".")
if index==-1:
print("输入格式有误,请重新输入!")
else:
if file_name in os.listdir():
new_name=file_name[:index]
new_name_hz=file_name[index:]
with open(f"{file_name}","r",encoding="UTF-8") as f1:
data=f1.read()
with open(f"{new_name}【备份】{new_name_hz}", "w", encoding="UTF-8") as f2:
f2.write(data)
print("备份成功")
else:print("不存在 !!")
开始拿到这道题我是完全一点思路都没有的,跟着老师敲了下来,顺带着改了一小部分。
这块代码的逻辑主要是:
用find()内置函数找到 ‘ . ’ 下标,再利用切片,将用户输入的需要备份的文件名用找到的 ‘ . ’ 分成两部分(new_name与new_name_hz)也就是实现仅仅在后缀名前加上【备 份】,例如:练习.txt 会备份成:练习【备份】.txt
4.2 发现问题
跑起来之后,我会发现有一个小bug!当用户想要备份文件名本身就带有‘ . ’时,直接就在后缀前的文件名中的‘ . ’加上了【备份】就像这样:
⚠️1.22练习.txt 会备份成:1【备份】. 22练习.txt
这完全不是用户想要的效果!!!
具体效果如图:

4.3 解决问题步骤
4.3.1 捋清思路
①定位到直接导致问题的代码行
我们可以明确的看出:
index = file_name.find(".")
这一行就是决定分割位置的关键点!!!
②思考如何解决
既然我们已经知道了关键代码在哪个位置,联想我们学过的一些知识点。
我首先会把找后缀 ‘ . ’ 问题转换成找最后一个下标的问题,接着问题就很好解决了,找到后用if判断直接就可以解决了
4.3.2 运用简单例子试错
这种方法很实用,将复杂问题简单化

我的思路就是:
①明确find()函数只能返回一个值,并且返回的是下标
②那么我把整个字符串用一个reversed()函数倒转,将这一个下标赋值给doc
③利用切片输出
但这一个想法很快就被推翻了,我觉得用reversed()做可能会有点不太理得清,最终我选择运用for循环遍历,搭配使用if判断。
4.3.3 编写代码
通过前面,以及代码的分析,我会发现写入函数,是解决这一问题的最优方式。
def check(name):
num = 0
num_index = []
for i in range(len(name)):
if name[i] == '.':
num+=1
num_index.append(i)
if num==0:
print("输入格式有误,请重新输入!")
return -1
elif num==1:
return num_index[0]
elif num>1:
return num_index[-1]
import os
file_name = input("请输入您需要备份的文件:")
real_index=check(file_name)
if file_name in os.listdir():
new_name=file_name[:real_index]
new_name_hz=file_name[real_index:]
with open(f"{file_name}","r",encoding="UTF-8") as f1:
data=f1.read()
with open(f"{new_name}【备份】{new_name_hz}", "w", encoding="UTF-8") as f2:
f2.write(data)
print("备份成功")
这一逻辑主要是:
①明确返回的参数是:后缀下标
②通过循环遍历用户输入的文件名字符串每一个字符,找到每一个‘.’对应的下标
③使用num计数,如果找到‘.’,num则加1,并且将此下标返回给列表count[]
④将列表count[]中最后一个值return出来作为真正的后缀
代码演示:

4.3.4 案例重要知识点———切片
所谓的切⽚是指对操作的对象 截取 其中⼀部分的操作。
字符串、列表、元组都⽀持切⽚操作。
顾头不顾尾!!!
例:
序列名称[开始位置下标:结束位置下标:步⻓(步阶)]
numstr = '0123456789'
numstr[0:3:1] # 012 => range⽅法⾮常类似,步⻓:每次前进1步
numstr[0:3:2] # 02 => 每次前进2步
步⻓可以为负数,正数代表从左向右截取,负数代表从右向左截取
图表演示:

在案例中:

当我用debug跑这一块代码时,new_name与new_name_hz很好展示出来顾头不顾尾的性质
因为顾头——–[index:]从后缀点开始到最后,能把‘.’直接输出
因为不顾尾——–[:index]从0开始到后缀点,不能把‘.’输出
希望今天的内容对您有帮助!!!





