前言:在Python编码中,我们会学到python中的文件的读取与写入,当然还有对文件夹的操作,在文章的最后还有异常捕获的详细解释~~
一.文件的概念:
有名称:每个文件都有一个文件名,用于在特定的文件系统中唯一标识该文件,方便用户和系统对文件进行识别、访问和管理,文件名一般由主文件名和扩展名组成,扩展名通常用于标识文件的类型。
有存储位置:文件存储在计算机的存储介质上,如硬盘、固态硬盘、U 盘、光盘等,文件系统会为每个文件分配特定的存储位置和空间,以确保数据的存储和读取。
数据有组织:文件中的数据可以按照特定的格式和结构进行组织,如文本文件中的字符序列、图像文件中的像素数据、音频文件中的音频采样数据等,不同类型的文件有不同的内部数据组织方式,以便于应用程序对其进行处理和解析。
一:open 函数
python 提供内置函数 open()实现对文件的操作。python 对文本文件和二进制文件采用统一的操作步骤,和把大象放冰箱里的一样分三步,"打开-操作-关闭。"
open(file, mode='r', encoding=None)
#file 包含文件名的字符串,可以是绝对路径,可以是相对路径。
#mode 一个可选字符串,用于指定打开文件的模式。默认值 r 表示文本读。
#encoding 文本模式下指定文件的字符编码
eg:
open('ko.txt','r',encoding='utf-8')
mode参数:
字符 意义
'r' 文本读取(默认)
'w' 文本写入,并先清空文件(慎用),文件不存在则创建
'x' 文本写,排它性创建,如果文件已存在则失败
'a' 文本写,如果文件存在则在末尾追加,不存在则创建
和 mode
组合的字符:
注意!总结:字符 意义
'b' 二进制模式,例如:'rb'表示二进制读
't' 文本模式(默认),例如:rt 一般省略 t
'+' 读取与写入,例如:'r+' 表示同时读写
虽然mode文件操作模式很多,但是我们只需要记住3个字符即可。r、w、a r+、w+、a+,代加号,功能全,既能读,⼜能写(区别在于指针到底指向不同) rb、wb、ab,代b的字符,代表以二进制的形式对其进行操作,适合读取文本或二进制格式⽂件,如图片、音频、视频等格式 rb+、wb+、ab+,代加号,功能全,既能读,又能写(区别在于指针到底指向不同)
二:读文件
绝对路径:绝对路径表示绝对概念,一般都是从盘符开始,然后一级一级向下查找(不能越级),直到找到我们要访问的文件即可。
相对路径:相对路径表示相对概念,不需要从盘符开始,首先需要找到一个参考点(就是Python文件本身)
平级关系:如果要访问的文件也Python代码处于同于目录,平行关系,同级的访问可以使用./文件名称,或者直接写文件名称即可。
上级关系:如果我们当前需要访问的文件位于当前Python代码的上一级目录,则我们可以通过../来访问上一级路径(如果是多级,也可以通过../../../去一层一层向上访问。
下级关系:如果我们要访问的文件在与Python代码同级的某个文件夹中,则我们可以通过文件夹名称/ 来访问某个目录下的文件相对路径: 同级路径,都在同一个文件夹中,兄弟关系,如static目录下有file1.txt和file2.txt,则file1.txt和file2.txt就是同级关系,同级访问直接使用名称即可。 下一级路径,我们的文件与另外一个文件存在上下级关系,如images文件夹中存在一个avatar文件夹,则images是上级目录,avatar是下级目录。则我们访问avatar可以通过images/avatar来实现。 上一级路径,如果我们某些时候,向从当前目录下,跳出到外一层路径,我们可以使用 ../ 来实现
2.1先在当前目录创建一个目录
2.2写入内容:
操作步骤!(read()读操作)(当前我用的是绝对路径,记得用\\进行转义,不然会报错)
# 打开文件
f = open('E:\\python\\python-studen\\2024-节点飞思\\student\\xo.txt','r',encoding='utf-8')
# 读取文件
res = f.read()
# 打印文件内容
print(res)
#关闭文件
f.close()
读取方式当然读不止有read():
2.3读取方式:
read(size)方法 :主要用于文本类型或者二进制文件(图片、音频、视频...)数据的读取 size表示要从文件中读取的数据的长度(单位是字符/字节),如果没有传入size,那么就表示读取文件中所有的数据。 readline()方法 :一次读取一行内容,每运行一次readline()函数,其就会将文件的指针向下移动一行 readlines()方法 :主要用于文本类型数据的读取 readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
read()
# 1、打开⽂件
f = open('python.txt', 'r', encoding='utf-8')
# 2、使⽤read()⽅法读取⽂件所有内容
contents = f.read()
print(contents)
# 3、关闭⽂件
f.close()
readline()
f = open('python.txt',encoding='utf-8') # 打开⽂件,encoding指定编码
while True:
# 读取⼀⾏内容
content = f.readline()
# 判断是否读取到内容,如果没有则退出
if not content:
break
# 如果读取到内容,则输出
print(content, end='')
# 关闭⽂件,释放资源
f.close()
readlines()
# 1、打开⽂件
f = open('python.txt', 'r', encoding='utf-8')
# 2、读取⽂件
lines = f.readlines()
for line in lines:
print(line, end='')
# 3、关闭⽂件
f.close()
注意!:二进制读取:# mode=rb,不需要encoding参数
三:写文件
操作步骤!(写操作)(mode='w')(请小心使用w模式,会清空原文件内容)
# 打开文件
f = open('E:\\python\\python-studen\\2024-节点飞思\\student\\xo.txt','w',encoding='utf-8')
# 写入内容
res = f.write('结束')
#关闭文件
f.close()
w模式:代表以只写模式打开一个文件,文件不存在,则自动创建该文件。w模式主要是针对文件写入而定义的模式。但是,要特别注意,w模式在写入时,光标也是置于第一行同时还会 清空原有文件内容 。操作步骤!(写操作)(mode='a')
# 打开文件
f = open('E:\\python\\python-studen\\2024-节点飞思\\student\\xo.txt','a',encoding='utf-8')
# 写入内容
res = f.write('第二次结束')
#关闭文件
f.close()
tell 方法:文件对象的 tell 方法返回整数,表示文件指针距离文件开头的字节数
with open('a.txt', 'r', encoding='utf-8') as f:
print(f.tell()) #文件指针距离文件开头的字节数
content = f.read(3)
print(content)
print(f.tell())#文件指针距离文件开头的字节数
seek 方法:通过文件对象的 seek 方法可以移动文件句柄
seek 方法接收两个参数:
offset 表示偏移指针的字节数
whence 表示偏移参考,默认为 0
0 表示偏移参考文件的开头,offset 必须是 >=0 的整数
1 表示偏移参考当前位置,offset 可以是负数
2 表示偏移参考文件的结尾,offset 一般是负数
四:关闭文件
close():
当你使用 open()
函数打开一个文件时,它会返回一个文件对象,你可以使用该对象的 close()
方法来关闭文件。
# 打开文件
f = open('E:\\python\\python-studen\\2024-节点飞思\\student\\xo.txt','r',encoding='utf-8')
#关闭文件
f.close()
with语句:
with上下文管理:解决经常会忘记关闭文件句柄,造成资源浪费,所以处理文件是往往使用 with 语句进行上下文管理。
with open('example.txt', 'r') as file:
content = file.read()
print(content)
五:os模块
导入os模块,并且调用内部方法
# 导入模块
import os
# 调用方法
os.函数名()
一:与文件操作的相关方法
os.rename(旧文件名称,新文件名称):对文件进行重命名操作 os.remove(要删除文件名称):对文件进行删除操作
os.rename()
#调用模块
import os
#进行重命名
os.rename('b.txt','bbb.txt')
os.remove()
#调用模块
import os
#删除bbb.txt
os.remove('bbb.txt')
案例:把Python项目目录下的python.txt文件,更名为linux.txt,休眠20s,刷新后,查看效果,然后对这个文件进行删除操作。
# 第⼀步:导⼊os模块
import os
# 第三步:引⼊time模块
import time
# 第⼆步:使⽤os.rename⽅法对python.txt进⾏重命名
os.rename('python.txt', 'linux.txt')
# 第四步:休眠10s
time.sleep(10)
# 第五步:删除⽂件(linux.txt)
os.remove('linux.txt')
二:与文件夹的相关操作
os.mkdir(新文件夹名称) 创建一个指定名称的文件夹 os.getcwd() current work directory,获取当前目录名称 os.chdir(切换后目录名称) change directory,切换目录 os.listdir(目标目录) 获取指定目录下的文件信息,返回列表 os.rmdir(目标目录) 用于删除一个指定名称的"空"文件夹
os.mkdir()
# 导⼊os模块
import os
# 引⼊time模块
import time
# 使⽤mkdir⽅法创建⼀个images⽂件夹
if not os.path.exists('images'): # 判断images⽂件夹是否存在,不存在则创建
os.mkdir('images') # 创建images⽂件夹
os.getcwd()
# 导⼊os模块
import os
# 获取当前目录名称
print(os.getcwd())
os.chdir()
# 导⼊os模块
import os
# 切换到上⼀级⽬录 => images
os.chdir('../../')
os.listdir()
# 导⼊os模块
import os
# 使⽤os.listdir打印当前所在⽬录下的所有⽂件,返回列表
print(os.listdir())
os.rmdir()
# 导⼊os模块
import os
# 删除空⽬录
os.rmdir('images/avatar') # 删除images⽂件夹
三:文件夹的删除
# 导⼊shutil模块,递归删除⾮空⽬录
import shutil
# 递归删除⾮空⽬录
shutil.rmtree('要删除⽂件夹路径')
递归删除文件夹的原理:理论上,其在删除过程中,如果文件夹非空,则自动切换到文件夹的内部,然后把其内部的文件,一个一个删除,当所有⽂件删除完毕后,返回到一级目录,删除文件夹本身。
六:Python异常
异常的基本概念:
在 Python 中,异常是一种在程序执行过程中出现的错误情况。当程序遇到错误,如除零错误、索引超出范围、文件不存在等情况时,就会引发异常。异常会中断当前的执行流程,除非被捕获并处理,否则程序会终止运行。
异常显示:
异常捕获:
基本语法:
try...except:主要用于捕获代码运行时异常,如果异常发生,则执行except中的代码try:
可能发⽣错误的代码
except:
如果出现异常执⾏的代码
异常处理的流程:
1.程序首先执行
try
代码块。2.如果在
try
代码块中没有发生异常,except
代码块不会被执行。3.如果发生异常,程序会跳转到匹配的
except
代码块,执行相应的异常处理代码。4.如果没有匹配的
except
代码块,异常会向上传播到调用栈的上一级,直到被捕获或程序终止。
多异常处理:
可以使用多个 except
子句来处理不同类型的异常:
try:
num = int("abc") # 这会引发 ValueError
result = 10 / num # 这会引发 ZeroDivisionError
print(result)
except ValueError:
print("输入不是有效的数字")
except ZeroDivisionError:
print("除数不能为零")
捕获多个异常:
可以将多个异常类型放在一个 except
子句中,使用元组:
try:
num = int("abc")
result = 10 / num
print(result)
except (ValueError, ZeroDivisionError):
print("输入错误或除数不能为零")
总结:
try-except
语句是 Python 中处理异常的重要工具,它可以帮助你使程序更健壮,避免因未处理的异常而导致程序崩溃。根据可能出现的异常类型和情况,合理地使用try-except
语句,可以使程序更加可靠,提高用户体验和代码的可维护性。
捕获异常并输出错误信息:
try:
可能遇到的错误代码
except Exception as e:
print(e)
代码实例:
try:
# 可能引发异常的代码
result = 10 / 0 # 这会引发 ZeroDivisionError
except ZeroDivisionError as e:
# 捕获 ZeroDivisionError 异常并输出错误信息
print(f"捕获到 ZeroDivisionError 异常:{e}")
except Exception as e:
# 捕获其他未被特定处理的异常
print(f"捕获到其他异常:{e}")
代码解释:
-
try 块:
- 包含可能会引发异常的代码。在上述示例中,
10 / 0
会导致ZeroDivisionError
异常,因为除数不能为零。
- 包含可能会引发异常的代码。在上述示例中,
-
except ZeroDivisionError as e:
- 这部分用于专门捕获
ZeroDivisionError
异常。 as e
允许将异常对象存储在变量e
中,以便在异常处理代码中使用。- 打印出
ZeroDivisionError
异常的具体信息,包括异常类型和异常消息。
- 这部分用于专门捕获
-
except Exception as e:
- 这是一个通用的异常捕获语句,用于捕获其他未被特定处理的异常。
Exception
是所有内置异常的基类,因此它可以捕获除ZeroDivisionError
以外的其他异常。- 同样,
as e
存储异常对象,以便打印异常信息。
异常捕获中else语句:
else语句:表示的是如果没有异常要执行的代码。
基本结构:
try:
# 可能引发异常的代码块
except SomeException:
# 当发生 SomeException 异常时执行的代码块
else:
# 当 try 代码块中没有发生异常时执行的代码块
代码实例:
try:
result = 10 / 2 # 正常的除法运算
except ZeroDivisionError:
print("除数不能为零")
else:
print(f"结果是: {result}")
代码解释
- try 代码块:
- 包含可能引发异常的代码。在这个例子中,
10 / 2
是一个正常的除法运算,不会引发异常。
- 包含可能引发异常的代码。在这个例子中,
- except ZeroDivisionError:
- 用于捕获
ZeroDivisionError
异常。由于try
代码块中没有发生该异常,所以不会执行此代码块。
- 用于捕获
- else 代码块:
- 当
try
代码块中没有发生异常时,执行此代码块。在这里,会打印出除法运算的结果。
- 当
异常捕获中finally语句:
基本概念:在 Python 的异常处理机制中,finally
子句是一个非常重要的部分,它的主要作用是确保无论 try
块中的代码是否引发异常,其中的代码都会被执行。
基本结构:
try:
# 可能引发异常的代码块
except SomeException:
# 当发生 SomeException 异常时执行的代码块
else:
# 当 try 代码块中没有发生异常时执行的代码块
finally:
# 无论是否发生异常都会执行的代码块
代码实例:
def divide(x, y):
try:
result = x / y
print(f"结果是: {result}")
except ZeroDivisionError:
print("除数不能为零")
finally:
print("这是 finally 子句,总是会执行")
# 调用函数
divide(10, 2)
divide(10, 0)
代码解释
- try 代码块:
- 包含可能引发异常的代码。在
divide(10, 2)
中,执行正常的除法运算,在divide(10, 0)
中,会引发ZeroDivisionError
。
- 包含可能引发异常的代码。在
- except ZeroDivisionError:
- 当发生
ZeroDivisionError
异常时,会打印相应的错误信息。
- 当发生
- finally 代码块:
- 无论是否发生异常,都会打印
"这是 finally 子句,总是会执行"
。
- 无论是否发生异常,都会打印
总结finally的作用:
finally
通常用于释放资源,如关闭文件、关闭数据库连接、释放锁等,确保资源在使用后被正确释放,避免资源泄漏。即使
try
块中引发了异常或except
块中引发了新的异常,finally
块中的资源清理代码仍然会执行。异常传播:
如果
finally
块中引发了异常,它会覆盖try
或except
块中引发的异常。 在finally
块中引发异常时要谨慎,避免掩盖了原有的异常。使用
finally
子句可以确保重要的操作(如资源清理)在任何情况下都能完成,提高代码的健壮性和可靠性,特别是在涉及资源管理时非常有用。
finally语句与else语句的区别:
else
子句:
只有在 try
块中没有发生异常时才会执行。
主要用于在没有异常发生时执行正常的操作,使正常操作和异常处理分离。
finally
子句:
无论是否发生异常都会执行。
侧重于资源清理和保证某些操作的最终执行。
好啦对于文件,文件夹,异常捕获的知识点讲解到这里就结束拉
标签:文件,Python,异常,捕获,except,try,详解,os,代码 From: https://blog.csdn.net/2301_78209919/article/details/145095324