网站首页 > 基础教程 正文
你平时是不是写检查文件是否存在也是同如下:
import os.path
def read_file_data(file):
if not os.path.exists(file):
print(f"{file}文件不存在")
return
# 这里会有一个问题,当程序执行到这里的时候,某种原因这个文件被删掉了,这个时候执行下面的代码就会报错了。
with open(file) as f:
data = f.read()
如代码注释,虽然前面的代码检查了文件的存在性,但是可能后面这个文件不存在了,这时候去打开文件就会失败了。所以我们需要对代码进行优化,做一个异常处理。
import os.path
def read_file_data(file):
if not os.path.exists(file):
print(f"{file}文件不存在")
return
try:
with open(file) as f:
data = f.read()
except FileNotFoundError:
print(f"{file}文件不存在")
return
except IsADirectoryError:
print(f"{file}是一个目录")
return
现在感觉代码安全了,但是你有没有发现前面的检查文件是否存在没有任何意义,所以你可以把这部分代码删掉,最终变成:
import os.path
def read_file_data(file):
try:
with open(file) as f:
data = f.read()
except FileNotFoundError:
print(f"{file}文件不存在")
return
except IsADirectoryError:
print(f"{file}是一个目录")
return
其实代码还能再优化,我个人建议所有的文件操作,尽量使用pathlib:
import pathlib
def read_file_data(file):
try:
data = pathlib.Path(file).read_text()
except FileNotFoundError:
print(f"{file}文件不存在")
return
except IsADirectoryError:
print(f"{file}是一个目录")
return
对pathlib的接口用法做个总结,特此声明,我也是偷懒,如下总结部分是摘自知乎:https://zhuanlan.zhihu.com/p/475661402,如有侵权请告知。
pathlib操作 | os及os.path操作 | 功能描述 |
Path.resolve() | os.path.abspath() | 获得绝对路径 |
Path.chmod() | os.chmod() | 修改文件权限和时间戳 |
Path.mkdir() | os.mkdir() | 创建目录 |
Path.rename() | os.rename() | 文件或文件夹重命名,如果路径不同,会移动并重新命名 |
Path.replace() | os.replace() | 文件或文件夹重命名,如果路径不同,会移动并重新命名,如果存在,则破坏现有目标。 |
Path.rmdir() | os.rmdir() | 删除目录 |
Path.unlink() | os.remove() | 删除一个文件 |
Path.unlink() | os.remove() | 删除一个文件 |
Path.unlink() | os.unlink() | 删除一个文件 |
Path.cwd() | os.getcwd() | 获得当前工作目录 |
Path.exists() | os.path.exists() | 判断是否存在文件或目录name |
Path.home() | os.path.expanduser() | 返回电脑的用户目录 |
Path.is_dir() | os.path.isdir() | 检验给出的路径是一个文件 |
Path.is_file() | os.path.isfile() | 检验给出的路径是一个目录 |
Path.is_symlink() | os.path.islink() | 检验给出的路径是一个符号链接 |
Path.stat() | os.stat() | 获得文件属性 |
PurePath.is_absolute() | os.path.isabs() | 判断是否为绝对路径 |
PurePath.joinpath() | os.path.join() | 连接目录与文件名或目录 |
PurePath.name | os.path.basename() | 返回文件名 |
PurePath.parent | os.path.dirname() | 返回文件路径 |
Path.samefile() | os.path.samefile() | 判断两个路径是否相同 |
PurePath.suffix | os.path.splitext() | 分离文件名和扩展名 |
猜你喜欢
- 2024-12-25 「万能Python」-15-文件处理 python 处理文件
- 2024-12-25 分享10个Python自动化脚本,解决日常问题
- 2024-12-25 Python 3 基础教程 - 文件 I/O python3.7文档
- 2024-12-25 最全Python基础知识总结 python基础100例
- 2024-12-25 Linux日常小技巧python脚本 python写linux脚本
- 2024-12-25 字符串跳舞,保姆级教程,利用python实现小姐姐跳代码舞
- 2024-12-25 Linux命令学习——rmdir命令 rm linux命令
- 2024-12-25 CMake个人理解和使用 cmake -wl
- 2024-12-25 Python文件系统:让你的文件操作变得更简单
- 2024-12-25 高效开发利器:深入学习Python标准库的实用技巧
- 最近发表
-
- Vue3+Bootstrap5项目初始化 vue 项目初始化
- 前端程序员不得不爱的bootstrap 前端 bom
- 保姆级软路由刷机+软路由OpenWRT入门设置,新手轻松搭建软路由
- 好东西!iOS 16.5 半越狱分屏功能,教你正确安装
- Python数据可视化Dash开源库Bootstrap之折叠列表Accordion
- 终于发布!iOS 16.5 越狱工具已发布,分屏插件有效
- 超爽!iOS 16.6.1 Bootstrap 半越狱更新,有通知
- 好玩!iOS 16.6.1 半越狱玩法,这插件真生效
- 来啦!iOS 16.6.1 nathanlr 半越狱,被迫公测体验
- iOS 17.0 Bootstrap 1.2.9 半越狱来啦!更新两点
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)