专业编程基础技术教程

网站首页 > 基础教程 正文

在python中如何去检测文件是否存在?

ccvgpt 2024-12-25 10:42:29 基础教程 1 ℃

你平时是不是写检查文件是否存在也是同如下:

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()

如代码注释,虽然前面的代码检查了文件的存在性,但是可能后面这个文件不存在了,这时候去打开文件就会失败了。所以我们需要对代码进行优化,做一个异常处理。

在python中如何去检测文件是否存在?

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()

分离文件名和扩展名

Tags:

最近发表
标签列表