欢迎光临
我们一直在努力

重生归来之我从零开始学Python(四)—————文件操作(基本操作,文件、文件夹操作、切片、综合案例逐步优化)

目录

 

一、文件的概念

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开始到后缀点,不能把‘.’输出

 

 

 


希望今天的内容对您有帮助!!!

 

赞(0)
未经允许不得转载:171主机测评 » 重生归来之我从零开始学Python(四)—————文件操作(基本操作,文件、文件夹操作、切片、综合案例逐步优化)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址