百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python中怎样检查文件或文件夹是否存在?

off999 2024-10-12 06:17 65 浏览 0 评论

编程派微信号:codingpy

本文由“编程派”原创编译。

在编程的世界中,一个问题通常有许多种解决办法,对于 Python 来说这点尤为明显。很多时候,你会发现很多标准模块的用途基本相同,只是功能略有区别。利用 Python 检查某个文件或文件夹是否存在就是一个证明这点的例子。

下面列出了检查文件或文件夹是否存在的几种方法及其区别之处。在下面的示例中,我们假设当前工作目录下有这些文件和文件夹:

drwxr-xr-x 3 scott staff 102 Jan 12 10:01 dir

-rw-r--r-- 1 scott staff 5 Jan 12 09:56 file.txt

lrwxr-xr-x 1 scott staff 8 Jan 12 09:56 link.txt -> file.txt

lrwxr-xr-x 1 scott staff 3 Jan 12 10:00 sym -> dir

我们有一个文件夹(dir)、一个文件(file.txt)、一个文件符号链接(link.txt)和一个目录符号链接(sym)。

检查某个文件是否存在

下面的代码可以说是检查文件是否存在以及其是否为文件的最简单方法。

import os os.path.isfile('./file.txt') # True

os.path.isfile('./link.txt') # True

os.path.isfile('./fake.txt') # False

os.path.isfile('./dir') # False

os.path.isfile('./sym') # False

os.path.isfile('./foo') # False

注意os.path.isfile能够追踪符号链接(symlinks),所以在检查link.txt时得到的结果是True。

isfile实际上只是一个辅助方法(helper method),其内部使用了os.stat和stat.S_ISREG(mode),稍后再详细介绍。

检查某个文件夹是否存在

与isfile方法类似,os.path.isdir是检查某个文件夹是否存在或者某个给定路径是否是文件夹的最简单方法。

import os os.path.isdir('./file.txt') # False

os.path.isdir('./link.txt') # False

os.path.isdir('./fake.txt') # False

os.path.isdir('./dir') # True

os.path.isdir('./sym') # True

os.path.isdir('./foo') # False

同样,os.path.isdir也能够追踪符合链接。它也只是一个简单的辅助函数,其底层调用了os.stat和stat.S_ISDIR(mode)。

检查是否存在文件或文件夹

检查某个路径(前提是你不关心其指向的是文件还是文件夹)是否存在的另一种方法,是使用os.path.exists。

import os os.path.exists('./file.txt') # True

os.path.exists('./link.txt') # True

os.path.exists('./fake.txt') # False

os.path.exists('./dir') # True

os.path.exists('./sym') # True

os.path.exists('./foo') # False

这个函数不关心路径指向的是文件、文件夹还是符号链接,因此这就好像你在使用的是isfile(path)或isdir(path)。但实际上,它调用的是os.stat(path),如果出错的话它会返回False。

高级方法

上面我一直在说那些方法利用了os.stat模块,因此我觉得详细了解下这个模块是有好处的。这是一个底层方法,可以提高关于文件、文件夹、套接字、缓存等的详细信息。

和前面提到的两种方法一样,os.stat也会追踪符号链接,因此如何你想获得某个链接的状态信息,应该使用的是os.lstat()方法。

由于操作系统之间存在差异,os.stat提供的数据可能有所区别。下面是每个操作系统都会提供的一些数据:

st_mode: protection bits

st_uid: owner's user id

st_gid: owner's group id

st_size: size of file in bytes

st_atime: time of last access

st_mtime: time of last modification

st_ctime: time of last metadata change on Unix, or time of creation on Windows

你可以使用stat模块提供的这些数据,获取自己感兴趣的信息,比如说某个路径是否指向一个套接字(stat.S_ISSOCK(mode)),或则是某个文件是不是其实只是一个有命名的管道(stat.S_ISFIFO(mode))。

如果你需要更高级的功能,那么应该使用os.stat这个模块。但是大部分情况下,你只需要使用os或os.path中的模块就足够了。

当然,其中一个合理的使用场景是需要对同一个文件进行多次测试,同时向避免stat系统调用带来的消耗。因此,如果你有不少的测试要做,那么这个模块会提高你的效率哦。

英文原文:http://stackabuse.com/python-check-if-a-file-or-directory-exists/

相关推荐

阿里云国际站ECS:阿里云ECS如何提高网站的访问速度?

TG:@yunlaoda360引言:速度即体验,速度即业务在当今数字化的世界中,网站的访问速度已成为决定用户体验、用户留存乃至业务转化率的关键因素。页面加载每延迟一秒,都可能导致用户流失和收入损失。对...

高流量大并发Linux TCP性能调优_linux 高并发网络编程

其实主要是手里面的跑openvpn服务器。因为并没有明文禁p2p(哎……想想那么多流量好像不跑点p2p也跑不完),所以造成有的时候如果有比较多人跑BT的话,会造成VPN速度急剧下降。本文所面对的情况为...

性能测试100集(12)性能指标资源使用率

在性能测试中,资源使用率是评估系统硬件效率的关键指标,主要包括以下四类:#性能测试##性能压测策略##软件测试#1.CPU使用率定义:CPU处理任务的时间占比,计算公式为1-空闲时间/总...

Linux 服务器常见的性能调优_linux高性能服务端编程

一、Linux服务器性能调优第一步——先搞懂“看什么”很多人刚接触Linux性能调优时,总想着直接改配置,其实第一步该是“看清楚问题”。就像医生看病要先听诊,调优前得先知道服务器“哪里...

Nginx性能优化实战:手把手教你提升10倍性能!

关注△mikechen△,十余年BAT架构经验倾囊相授!Nginx是大型架构而核心,下面我重点详解Nginx性能@mikechen文章来源:mikechen.cc1.worker_processe...

高并发场景下,Spring Cloud Gateway如何抗住百万QPS?

关注△mikechen△,十余年BAT架构经验倾囊相授!大家好,我是mikechen。高并发场景下网关作为流量的入口非常重要,下面我重点详解SpringCloudGateway如何抗住百万性能@m...

Kubernetes 高并发处理实战(可落地案例 + 源码)

目标场景:对外提供HTTPAPI的微服务在短时间内收到大量请求(例如每秒数千至数万RPS),要求系统可弹性扩容、限流降级、缓存减压、稳定运行并能自动恢复。总体思路(多层防护):边缘层:云LB...

高并发场景下,Nginx如何扛住千万级请求?

Nginx是大型架构的必备中间件,下面我重点详解Nginx如何实现高并发@mikechen文章来源:mikechen.cc事件驱动模型Nginx采用事件驱动模型,这是Nginx高并发性能的基石。传统...

Spring Boot+Vue全栈开发实战,中文版高清PDF资源

SpringBoot+Vue全栈开发实战,中文高清PDF资源,需要的可以私我:)SpringBoot致力于简化开发配置并为企业级开发提供一系列非业务性功能,而Vue则采用数据驱动视图的方式将程序...

Docker-基础操作_docker基础实战教程二

一、镜像1、从仓库获取镜像搜索镜像:dockersearchimage_name搜索结果过滤:是否官方:dockersearch--filter="is-offical=true...

你有空吗?跟我一起搭个服务器好不好?

来人人都是产品经理【起点学院】,BAT实战派产品总监手把手系统带你学产品、学运营。昨天闲的没事的时候,随手翻了翻写过的文章,发现一个很严重的问题。就是大多数时间我都在滔滔不绝的讲理论,却很少有涉及动手...

部署你自己的 SaaS_saas如何部署

部署你自己的VPNOpenVPN——功能齐全的开源VPN解决方案。(DigitalOcean教程)dockovpn.io—无状态OpenVPNdockerized服务器,不需要持久存储。...

Docker Compose_dockercompose安装

DockerCompose概述DockerCompose是一个用来定义和管理多容器应用的工具,通过一个docker-compose.yml文件,用YAML格式描述服务、网络、卷等内容,...

京东T7架构师推出的电子版SpringBoot,从构建小系统到架构大系统

前言:Java的各种开发框架发展了很多年,影响了一代又一代的程序员,现在无论是程序员,还是架构师,使用这些开发框架都面临着两方面的挑战。一方面是要快速开发出系统,这就要求使用的开发框架尽量简单,无论...

Kubernetes (k8s) 入门学习指南_k8s kubeproxy

Kubernetes(k8s)入门学习指南一、什么是Kubernetes?为什么需要它?Kubernetes(k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它...

取消回复欢迎 发表评论: