最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用Python判斷文件的幾種方法及其優(yōu)劣對比

 更新時(shí)間:2022年06月21日 11:33:33   作者:編程學(xué)習(xí)網(wǎng)  
任何的編程語言都離不開文件操作,文件操作主要是幫助我們更好的創(chuàng)建打開文件,讀取文件中的內(nèi)容、或是把我們想要保存的內(nèi)容寫入文件中、或是管理文件目錄等等,下面這篇文章主要給大家介紹了關(guān)于利用Python判斷文件的幾種方法及其優(yōu)劣對比的相關(guān)資料,需要的朋友可以參考下

前言

我們知道當(dāng)文件不存在的時(shí)候,open()方法的寫模式與追加模式都會(huì)新建文件,但是對文件進(jìn)行判斷的場景還有很多,比如,在爬蟲下載圖片的時(shí)候,可能需要判斷文件是否存在,以免重復(fù)下載;又比如,創(chuàng)建新文件的時(shí)候,可能需要判斷文件是否存在,存在就先做個(gè)備份……所以,學(xué)習(xí)判斷文件是否存在,還是很有必要的。

學(xué)習(xí)是循序漸進(jìn)的過程,若能建立知識(shí)點(diǎn)間的聯(lián)系,進(jìn)行系統(tǒng)性的學(xué)習(xí),那將更有助于效果。閱讀這篇文章,你將讀到如下內(nèi)容:

1、判斷文件的方法(try語句、os模塊、pathlib模塊)
2、以上幾種方法的優(yōu)劣對比

懶人的try語句

我們之前學(xué)過,要用with語句來處理文件讀寫,但with語句也不是萬能的,所以還得關(guān)注一些異常情況。

例如,當(dāng)使用open()方法的時(shí)候,如果文件不存在,程序會(huì)拋出FileNotFoundError異常,而如果權(quán)限不足的話,就會(huì)拋出PersmissionError異常。

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

為了避免這些異常導(dǎo)致程序中斷,我們可以用try…except…語句來捕捉異常,然后在except子句進(jìn)行異常的處理。

不過,在貓貓看來,這個(gè)方法不值得推薦。原因有二,一是這種方法很被動(dòng),程序的健康受制于不可預(yù)測的異常;二是當(dāng)文件不存在的時(shí)候,我們可能需要去創(chuàng)建文件,這些邏輯如果寫在except子句里,可讀性太差了。

傳統(tǒng)的os模塊

顧名思義,Python內(nèi)置的os模塊是用來與OS(操作系統(tǒng))進(jìn)行交互的模塊,它可以實(shí)現(xiàn)很多在命令行下做的操作,例如,獲取操作系統(tǒng)信息、獲取/修改環(huán)境變量、進(jìn)行目錄操作(創(chuàng)建、刪除、遍歷)和各種文件操作等等。下面,我們要學(xué)習(xí)的是跟文件判斷密切相關(guān)的幾個(gè)方法。

1、os.path.exists()用于判斷文件及文件夾是否存在(注意:因?yàn)閮烧叨寄芘袛?,為了有效區(qū)分文件和文件夾,最好保證文件名是帶后綴的):

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()檢測文件路徑的訪問權(quán)限,語法: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可執(zhí)行

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

os.mkdir()創(chuàng)建目錄、os.rmdir()刪除目錄、os.rename()重命名、os.remove()刪除文件、os.path.join()連接目錄與文件名、os.path.split()分割目錄與文件名……(不一一舉例了,今后有機(jī)會(huì)再作介紹)

時(shí)尚的pathlib模塊

pathlib模塊是python3.4才加入的模塊,官方介紹它是面向?qū)ο蟮奈募到y(tǒng)路徑(Object-oriented filesystem paths),這是一個(gè)很強(qiáng)大的模塊,文末附錄了官方文檔地址。

這里主要介紹幾個(gè)基本的用法:

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 # 是否文件

幾種方法優(yōu)劣對比

圍繞文件操作的知識(shí)很多,限于篇幅,本文主要對判斷文件作了介紹,今后也許還會(huì)對其它具體話題進(jìn)行學(xué)習(xí)。

現(xiàn)在知道了幾種判斷文件是否存在的方法,貓貓?jiān)囍鶕?jù)自己的理解,對它們做一下評(píng)判。

首先,try語句的缺點(diǎn)是沒有主動(dòng)做判斷,不方便根據(jù)文件是否存在而做針對性的處理,它把必要的邏輯交給異常捕獲,多少顯得“不負(fù)責(zé)任”;try語句也有優(yōu)點(diǎn),一是不需要引入模塊,不需要區(qū)分各種使用方法,二是將其它可能存在的異常都打包,避免多系統(tǒng)或者多場景的遺漏。

os模塊是傳統(tǒng)的老模塊了,在使用上和維護(hù)上都會(huì)比較順暢;它的主要缺點(diǎn)在于有的方法比較繁瑣,比如由于使用字符串來表示文件路徑,這會(huì)導(dǎo)致路徑拼接上的麻煩。另外,不同操作系統(tǒng)在路徑分隔符上的差異(Windows使用\分隔符,Linux和Mac使用/分隔符),也可能導(dǎo)致難以發(fā)現(xiàn)的錯(cuò)誤。

相對來說,pathlib功能最強(qiáng)大,但普及度比較低,有一定的學(xué)習(xí)門檻;它主要的優(yōu)點(diǎn)是面向?qū)ο?,同時(shí),因?yàn)閷Σ煌僮飨到y(tǒng)的特性做了封裝,能有效避免字符串表示文件路徑的難題。它也有不足之處,即沒有像os.access()這種可以檢測訪問權(quán)限的方法,雖然這個(gè)方法基本不會(huì)使用到。

下面比較了三種拼接文件路徑的方法,方法一未對分隔符做處理,不能保證在每個(gè)操作系統(tǒng)都能找到;方法二需要反復(fù)使用os.path.join;方法三只用“/"就能拼接路徑,而且肯定支持多操作系統(tǒng)。

# 錯(cuò)誤拼接:未處理分隔符
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"

總結(jié)一下,如果文件路徑簡單,僅僅要用到exists()、is_dir()、is_file() 這幾個(gè)方法的話,os.path模塊和pathlib.Path模塊不分伯仲,都很好用,但是如果考慮到繁復(fù)的路徑拼接的話,pathlib.Path就會(huì)勝出一籌。

總結(jié)

到此這篇關(guān)于利用Python判斷文件的幾種方法及其優(yōu)劣對比的文章就介紹到這了,更多相關(guān)Python判斷文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    圖文詳解OpenCV中光流以及視頻特征點(diǎn)追蹤

    光流是空間運(yùn)動(dòng)物體在觀察成像平面上的像素運(yùn)動(dòng)的瞬時(shí)速度,是利用圖像序列中像素在時(shí)間域上的變化以及相鄰幀之間的相關(guān)性來找到上一幀跟當(dāng)前幀之間存在的相應(yīng)關(guān)系,這篇文章主要給大家介紹了關(guān)于OpenCV中光流以及視頻特征點(diǎn)追蹤的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python-docx的簡單使用示例教程

    python-docx的簡單使用示例教程

    這篇文章主要介紹了python-docx的簡單使用,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Python入門教程之pycharm安裝/基本操作/快捷鍵

    Python入門教程之pycharm安裝/基本操作/快捷鍵

    這篇文章主要介紹了Python入門教程之pycharm安裝/基本操作/快捷鍵,Python是一門非常強(qiáng)大好用的語言,也有著易上手的特性,本文為入門教程,需要的朋友可以參考下
    2023-04-04
  • Python中八大圖像特效算法的示例詳解

    Python中八大圖像特效算法的示例詳解

    圖像特效處理是基于圖像像素?cái)?shù)據(jù)特征,將原圖像進(jìn)行一定步驟的計(jì)算——例如像素作差、灰度變換、顏色通道融合等,從而達(dá)到期望的效果。本文將為大家介紹八種常用的圖像特效算法,需要的可以參考一下
    2022-03-03
  • Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片

    Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片

    這篇文章主要為大家介紹了Python使用PyPDF2?Pillow庫來將PDF文件轉(zhuǎn)圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Windows下Anaconda安裝、換源與更新的方法

    Windows下Anaconda安裝、換源與更新的方法

    這篇文章主要介紹了Windows下Anaconda安裝、換源與更新的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 使用Python快速實(shí)現(xiàn)鏈接轉(zhuǎn)word文檔

    使用Python快速實(shí)現(xiàn)鏈接轉(zhuǎn)word文檔

    這篇文章主要為大家詳細(xì)介紹了如何使用Python快速實(shí)現(xiàn)鏈接轉(zhuǎn)word文檔功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • Python獲取圖片像素BGR值并生成純色圖

    Python獲取圖片像素BGR值并生成純色圖

    這篇文章主要介紹了利用Python獲取圖片像素BGR值,并將其生成純色圖。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • Python使用pickle模塊存儲(chǔ)數(shù)據(jù)報(bào)錯(cuò)解決示例代碼

    Python使用pickle模塊存儲(chǔ)數(shù)據(jù)報(bào)錯(cuò)解決示例代碼

    這篇文章主要介紹了Python使用pickle模塊存儲(chǔ)數(shù)據(jù)報(bào)錯(cuò)解決示例代碼,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python數(shù)據(jù)清洗&預(yù)處理入門教程

    Python數(shù)據(jù)清洗&預(yù)處理入門教程

    凡事預(yù)則立,不預(yù)則廢,訓(xùn)練機(jī)器學(xué)習(xí)模型也是如此。數(shù)據(jù)清洗和預(yù)處理是模型訓(xùn)練之前的必要過程,否則模型可能就廢了。本文是一個(gè)初學(xué)者指南,將帶你領(lǐng)略如何在任意的數(shù)據(jù)集上,針對任意一個(gè)機(jī)器學(xué)習(xí)模型,完成數(shù)據(jù)預(yù)處理工作
    2022-10-10

最新評(píng)論

东方市| 西宁市| 昌都县| 桐庐县| 藁城市| 芦溪县| 玉树县| 平阳县| 南昌县| 绥棱县| 淮阳县| 松阳县| 宝山区| 抚顺市| 黔西县| 富裕县| 武鸣县| 郁南县| 罗江县| 河池市| 文登市| 景德镇市| 白山市| 南陵县| 湖州市| 晋江市| 含山县| 沙田区| 兴安县| 阿坝| 延安市| 成都市| 富顺县| 新化县| 花莲县| 德安县| 江口县| 汕尾市| 青田县| 正蓝旗| 泗水县|