利用Python判断文件的几种方法及其优劣对比

目录
  • 前言
  • 懒人的try语句
  • 传统的os模块
  • 时尚的pathlib模块
  • 几种方法优劣对比
  • 总结

前言

我们知道当文件不存在的时候,open()方法的写模式与追加模式都会新建文件,但是对文件进行判断的场景还有很多,比如,在爬虫下载图片的时候,可能需要判断文件是否存在,以免重复下载;又比如,创建新文件的时候,可能需要判断文件是否存在,存在就先做个备份……所以,学习判断文件是否存在,还是很有必要的。

学习是循序渐进的过程,若能建立知识点间的联系,进行系统性的学习,那将更有助于效果。阅读这篇文章,你将读到如下内容:

1、判断文件的方法(try语句、os模块、pathlib模块)
2、以上几种方法的优劣对比

懒人的try语句

我们之前学过,要用with语句来处理文件读写,但with语句也不是万能的,所以还得关注一些异常情况。

例如,当使用open()方法的时候,如果文件不存在,程序会抛出FileNotFoundError异常,而如果权限不足的话,就会抛出PersmissionError异常。

with open("python.log", "r") as f:
    ...:     f.read()
-----------------------
...(略)
FileNotFoundError: [Errno 2] No such file or directory: 'python.log'

为了避免这些异常导致程序中断,我们可以用try…except…语句来捕捉异常,然后在except子句进行异常的处理。

不过,在猫猫看来,这个方法不值得推荐。原因有二,一是这种方法很被动,程序的健康受制于不可预测的异常;二是当文件不存在的时候,我们可能需要去创建文件,这些逻辑如果写在except子句里,可读性太差了。

传统的os模块

顾名思义,Python内置的os模块是用来与OS(操作系统)进行交互的模块,它可以实现很多在命令行下做的操作,例如,获取操作系统信息、获取/修改环境变量、进行目录操作(创建、删除、遍历)和各种文件操作等等。下面,我们要学习的是跟文件判断密切相关的几个方法。

1、os.path.exists()用于判断文件及文件夹是否存在(注意:因为两者都能判断,为了有效区分文件和文件夹,最好保证文件名是带后缀的):

import os
# 文件存在 VS 不存在
os.path.exists("test.txt") >>>True
os.path.exists("cat.txt") >>>False
# 文件夹存在 VS 不存在
os.path.exists("cat/images") >>>True
os.path.exists("cat/image") >>>False

2、os.path.isfile()、os.path.isdir() 判断给定的路径是文件还是文件夹:

os.path.isfile("cat/images") >>>False
os.path.isdir("cat/images") >>>True
os.path.isfile("test.txt") >>>True

3、os.access()检测文件路径的访问权限,语法:os.access(path, mode);其中path指的是文件或者文件夹,mode指的是要检测的模式:

os.access("cat/images", os.F_OK) >>>True # path存在
os.access("cat/images", os.R_OK) >>>True # path可读
os.access("cat/images", os.W_OK) >>>True # path可写
os.access("cat/images", os.X_OK) >>>True # path可执行

4、os模块中其它常用方法:

os.mkdir()创建目录、os.rmdir()删除目录、os.rename()重命名、os.remove()删除文件、os.path.join()连接目录与文件名、os.path.split()分割目录与文件名……(不一一举例了,今后有机会再作介绍)

时尚的pathlib模块

pathlib模块是python3.4才加入的模块,官方介绍它是面向对象的文件系统路径(Object-oriented filesystem paths),这是一个很强大的模块,文末附录了官方文档地址。

这里主要介绍几个基本的用法:

import pathlib
file_obj = pathlib.Path("test.txt")

file_obj.name >>>'test.txt' # 文件名
file_obj.exists() >>> True # 是否存在
file_obj.is_dir() >>>False # 是否文件夹
file_obj.is_file() >>>True # 是否文件

几种方法优劣对比

围绕文件操作的知识很多,限于篇幅,本文主要对判断文件作了介绍,今后也许还会对其它具体话题进行学习。

现在知道了几种判断文件是否存在的方法,猫猫试着根据自己的理解,对它们做一下评判。

首先,try语句的缺点是没有主动做判断,不方便根据文件是否存在而做针对性的处理,它把必要的逻辑交给异常捕获,多少显得“不负责任”;try语句也有优点,一是不需要引入模块,不需要区分各种使用方法,二是将其它可能存在的异常都打包,避免多系统或者多场景的遗漏。

os模块是传统的老模块了,在使用上和维护上都会比较顺畅;它的主要缺点在于有的方法比较繁琐,比如由于使用字符串来表示文件路径,这会导致路径拼接上的麻烦。另外,不同操作系统在路径分隔符上的差异(Windows使用\分隔符,Linux和Mac使用/分隔符),也可能导致难以发现的错误。

相对来说,pathlib功能最强大,但普及度比较低,有一定的学习门槛;它主要的优点是面向对象,同时,因为对不同操作系统的特性做了封装,能有效避免字符串表示文件路径的难题。它也有不足之处,即没有像os.access()这种可以检测访问权限的方法,虽然这个方法基本不会使用到。

下面比较了三种拼接文件路径的方法,方法一未对分隔符做处理,不能保证在每个操作系统都能找到;方法二需要反复使用os.path.join;方法三只用“/"就能拼接路径,而且肯定支持多操作系统。

# 错误拼接:未处理分隔符
data_folder = "source_data/text_files/"
file_to_open = data_folder + "test.txt"

# os模块拼接
import os
data_folder = os.path.join("source_data", "text_files")
file_to_open = os.path.join(data_folder, "test.txt")

# pathlib模块拼接
from pathlib import Path
data_folder = Path("source_data/text_files/")
file_to_open = data_folder / "test.txt"

总结一下,如果文件路径简单,仅仅要用到exists()、is_dir()、is_file() 这几个方法的话,os.path模块和pathlib.Path模块不分伯仲,都很好用,但是如果考虑到繁复的路径拼接的话,pathlib.Path就会胜出一筹。

总结

到此这篇关于利用Python判断文件的几种方法及其优劣对比的文章就介绍到这了,更多相关Python判断文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python判断文件是否存在,不存在就创建一个的实例

    如下所示: try: f =open("D:/1.txt",'r') f.close() except IOError: f = open("D:/1.txt",'w') 以上这篇python判断文件是否存在,不存在就创建一个的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python中readline判断文件读取结束的方法

    本文实例讲述了python中readline判断文件读取结束的方法.分享给大家供大家参考.具体分析如下: 大家知道,python中按行读取文件可以使用readline函数,下面现介绍一个按行遍历读取文件的方法,通过这个方法,展开我们要讨论的问题: 复制代码 代码如下: filename = raw_input('Enter your file name')  #输入要遍历读取的文件路径及文件名 file = open(filename,'r') done = 0 while not  done:

  • Python判断文件或文件夹是否存在的三种方法

    常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try语句.pathlib模块. 1.使用os模块 os模块中的os.path.exists()方法用于检验文件是否存在. 判断文件是否存在 import os os.path.exists(test_file.txt) #True os.path.exists(no_exist_file.txt) #Fa

  • 使用Python判断一个文件是否被占用的方法教程

    今天有同学问,用os模块的access()能否判断一个文件是否被占用?直觉上,这是行不通的,因为access()返回的是文件的读写属性.为了确认这一点,我简单测试了一下. >>> import os >>> fn = r'D:\temp\csdn\t.py' # 测试用的文件 >>> os.access(fn, os.F_OK) # 文件是否存在 True >>> os.access(fn, os.R_OK) # 文件是否可读 Tru

  • Python 判断文件或目录是否存在的实例代码

    使用 os 模块 判断文件是否存在 os.path.isfile(path) 判断目录是否存在 os.path.isdir(path) 判断路径是否存在 # 使用 path 模块 os.path.exists(path) # 使用 access() 方法 os.access(path, os.F_OK) 使用 open 函数和异常捕获 如果直接用 open() 函数打开一个不存在的文件时,程序会抛出异常,我们可以通过 try 语句来捕获异常以达到判断文件是否存在的目的. 如果文件不存在,open

  • Python判断文件和文件夹是否存在的方法

    一.python判断文件和文件夹是否存在.创建文件夹 复制代码 代码如下: >>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assis

  • 利用Python判断文件的几种方法及其优劣对比

    目录 前言 懒人的try语句 传统的os模块 时尚的pathlib模块 几种方法优劣对比 总结 前言 我们知道当文件不存在的时候,open()方法的写模式与追加模式都会新建文件,但是对文件进行判断的场景还有很多,比如,在爬虫下载图片的时候,可能需要判断文件是否存在,以免重复下载:又比如,创建新文件的时候,可能需要判断文件是否存在,存在就先做个备份……所以,学习判断文件是否存在,还是很有必要的. 学习是循序渐进的过程,若能建立知识点间的联系,进行系统性的学习,那将更有助于效果.阅读这篇文章,你将读

  • 利用Python复制文件的9种方法总结

    以下是演示**"如何在Python中复制文件"的九种方法**. shutil copyfile()方法 shutil copy()方法 shutil copyfileobj()方法 shutil copy2()方法 os popen方法 os系统()方法 Thread()方法 子进程调用()方法 子进程check_output()方法 1. Shutil Copyfile()方法 该方法只有在目标可写时才将源的内容复制到目的地.如果您没有写入权限,则会引发IOError. 它通过打开输

  • python 下载文件的几种方法汇总

    前言 使用脚本进行下载的需求很常见,可以是常规文件.web页面.Amazon S3和其他资源.Python 提供了很多模块从 web 下载文件.下面介绍 一.使用 requests requests 模块是模仿网页请求的形式从一个URL下载文件 示例代码: import requests url = 'xxxxxxxx' # 目标下载链接 r = requests.get(url) # 发送请求 # 保存 with open ('r.txt', 'rb') as f: f.write(r.con

  • 利用JS判断数据类型的四种方法

    目录 前言 1.typeof 2.instanceof 3.constructor 细节问题: 4.toString 总结 前言 Javascript 中的数据类型判断其实是一个JavaScript非常基础问题,但不论是日常实际编程过程中和还是面试时,这都是一个非常常见的问题. 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String.Number.Boolean.Symbol.Undefined.Null 引用类型:O

  • 利用Python读取文件的四种不同方法比对

    前言 大家都知道Python 读文件的方式多种多样,但是当需要读取一个大文件的时候,不同的读取方式会有不一样的效果.下面就来看看详细的介绍吧. 场景 逐行读取一个 2.9G 的大文件 CPU i7 6820HQ RAM 32G 方法 对每一行的读取进行一次分割字符串操作 以下方法都使用 with-as 方法打开文件. with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等. 方法一

  • 详解使用Python下载文件的几种方法

    在使用Python进行数据抓取的时候,有时候需要保持文件或图片等,在Python中可以有多种方式实现.今天就一起来学习下. urllib.request 主要使用的是urlretrieve方法,该方法处理待淘汰的方法,不建议使用. import urllib.request url = 'https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png' urllib.request.urlretrieve(url,

  • 利用Python判断整数是否是回文数的3种方法总结

    前言 所谓回文数,就是说一个数字从左边读和从右边读的结果是一模一样的,比如12321.本文通过三个方法详细介绍了判断的方法,下面来一起看看吧 方法一:逐位判断 原理: 用一个while循环,将一个数每次都取出首位和末位,判断是否相等,只要有一次不相等退出即可. 回文数的判断条件:加入一个变量位数,如果这个数是奇数,位数为1时,即最中间那一位数,此时退出即可,同理,偶数,位数为0时,退出. 问题: 如何判断位数 如何逐位取值 优点: 思路简单 解决: 判断位数下面程序即可 y=x weishu=0

  • Python中可以用三种方法判断文件是否存在

    目录 1.使用os模块 2.使用Try语句 3. 使用pathlib模块 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try语句.pathlib模块. 1.使用os模块 os模块中的os.path.exists()方法用于检验文件是否存在. 判断文件是否存在 import os os.path.exists(test_file.txt) #True

  • python中判断文件结束符的具体方法

    python中判断文件结束符的方法:可以使用try except语句块来进行判断. 具体使用方法:[try:while True:s = input() except EOFError: pass]. Python 中,用try except语句块捕获并处理异常,其基本语法结构如下所示: try:     可能产生异常的代码块 except [ (Error1, Error2, ... ) [as e] ]:     处理异常的代码块1 except [ (Error3, Error4, ...

随机推荐