python文件路径和内容处理以及异常处理
1.文件路径
绝对路径和相对路径
绝对路径:绝对路径,从盘符开始的路径(d:\data\file\abc.txt)
1 2 3 | from pathlib import Path path = Path( 'test.txt' ) print (path.absolute()) |
相对路径:相对于当前的路径,当前是一个变量,在执行python时,所处的目录(./abc/a.txt ../ab/c.txt test.txt)
没有写文件夹的:当前文件夹下的文件
./当前文件夹下的文件
../父文件夹下的文件
如何判断路径存在?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import os from pathlib import Path path = Path( 'test.txt' ) print (path.absolute()) if (path.exists()): print ( "路径存在" ) if path.is_dir(): #是不是目录 path.rmdir() #删除目录 print ( "目录删除成功" ) else : os.remove(path) print ( "文件删除成功" ) else : print ( "路径不存在" ) #path.mkdir()#创建目录 path.touch() #创建文件 path = Path( './yaml_demo.py' ) print (path.absolute()) path = Path( '../yaml_demo.py' ) print (path.absolute()) |
path功能
path不仅可以实现相对路径转绝对,而且可以:
重命名文件:os.rename("abc.txt","a.txt")
获取当前文件的路径信息:
os.getcwd()#获取当前文件到绝对路径
os.path.dirname(__file__)#获取当前文件到绝对路径
根据路径创建文件
根据路径创建目录
判断路径是否存在
判断路径是目录还是文件
获取文件夹的所有文件名:os.listdir("999") #返回结果是一个文件名的列表
删除路径(目录):os.rmdir("999") #删除空文件夹
listdir1=os.listdir("888") #由于对文件的操作有一定的局限性 #只能操作当前项目中的文件,除非使用绝对路径 path1=r"D:\python\code\pythonProject2\888\\" #os.getcwd() for i in listdir: #拼接文件的路径信息+文件的名字 print(path1+i) os.remove(path1+i) else: os.rmdir("888")
删除文件(os模块):os.remove("a.txt")
2.文件内容
2.1 打开文件
首先要有路径,才能操作文件
其次要打开文件,才能操作文件
内置函数open打开文件
open(file,mode='r',buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- 位置参数:file文件路径
- 关键字参数:model
wt:文本写入(会创建新文件,清空文件内容)
rt:文本读取 (默认值)
wb:二进制写入(会创建新文件,清空文件内容)
b:二进制读取
-
encoding:
gbk:windows中文版的默认编码
utf-8:推荐的统一编码
文件操作
1 2 3 4 5 6 7 8 9 | open ( "test.txt" ,mode = "wt" ,encoding = "utf-8" ) #创建空文件 open ( "test.txt" ,mode = "rt" ,encoding = "utf-8" ) #读取文本文件 open ( "img.jpg" , "wb" ) #创建空二进制文件 open ( "img.jpg" , "rb" ) #读取二进制文件 open ( "test.txt" ) #没有关键字参数,不报错 open ( "test.txt" ,mode = "w" ) #wt open ( "test.txt" ,mode = "t" ) #rt |
2.2 读写文件
注意:
- 正确的打开模式,才能读写
- 读写之后,应该及时关闭文件
2.2.1 写入文件
write:写入内容
writelines:写入多行
1 2 3 4 5 6 7 | a = "你好,我是张三" b = "你好,我是王舞" c = [a,b] f = open ( "test.txt" ,mode = "wt" ,encoding = "utf-8" ) f.write( "你好呀\n今天天气很好呀" ) #写入内容 f.writelines(c) #写入多行 f.close() |
2.2.2 读取文件
read:读取内容
1 2 3 4 | f = open ( "test.txt" ,encoding = "utf-8" ) s = f.read() #读取全部内容 print (s) f.close() |
readline:读取一行
1 2 3 4 | f = open ( "test.txt" ,encoding = "utf-8" ) s = f.readline() #读取一行 print (s) f.close() |
readlines:读取所有行
1 2 3 4 | f = open ( "test.txt" ,encoding = "utf-8" ) s = f.readlines() #读取所有行 print (s) f.close() |
“行”的标准是什么?
- 以换行符进行分割
2.3 with--open
可以通过上下文管理器关键字with,进行读写,不需要进行手动关闭文件,使用完会自动关闭
如果打开一个文件是写入的模式,该文件存在那么会覆盖内容,如果不存在会进行新建一个文件
如果以读的模式打开一个文件,文件不存在会直接报错
with open("./abc.txt","w",encoding="utf-8") as f: f.write("今天天气挺好的")
2.4 r+,w+,a+
后面加上+ 表示可以同时读写,如:
with open("./abc.txt","w+",encoding="utf-8") as f: f.write("今天天气很好呀") print(f.read())
3.异常处理
3.1 异常常识:
异常+不处理:程序崩溃
异常+处理:程序继续运行
异常的特点:
- 停止执行
- 向上冒泡(传播)
- 显示异常原因和调用栈
3.2 异常处理
在异常传播的任何一个层级,通过捕捉对异常进行处理
1 2 3 4 5 6 7 8 9 10 | def c(): try : open ( "abc.apx" ) #出现异常 except Exception as e: #捕捉常见异常 print ( 1 ,e) except FileNotFoundError as e: print ( 2 ,e) print ( "i am c" ) c() |
注意:
- 异常捕捉从上到下,只捕捉一次
- 异常也分大小
- 如果捕捉的异常==出现的异常,捕捉成功
- 如果捕捉的异常>出现的异常,捕捉成功
3.3 try--except--else--finally
try: print (1) print (2) print (3) print(a) print(5) print(6) print(7) except: print("当try中捕获到异常之后会执行except里面的代码") print("如果try的代码快没有出现异常,那么不会执行except里面的代码") else: print("如果try中没有出现异常会执行的代码块") print("如果try中没有出现异常会执行的代码块") finally: print("不管try中是否有异常,都会执行的代码块")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)