Python常用基礎(chǔ)模塊之os.path模塊詳解
一、os.path模塊介紹
os 模塊是 Python 內(nèi)置的與操作系統(tǒng)功能和文件系統(tǒng)相關(guān)的模塊。
該模塊的子模塊 os.path 是專門用于進行路徑操作的模塊。
常用的路徑操作主要有判斷目錄是否存在、創(chuàng)建目錄、刪除目錄和遍歷目錄等。
說明:在使用 os.path 模塊時,推薦使用字符串 (Unicode) 表示文件名或者路徑。
由于某些 Unix 操作系統(tǒng)不支持 Unicode 字符串,所以需要使用字節(jié)對象;而在 Windows 操作系統(tǒng)中,則推薦所有的應(yīng)用程序都使用字符串對象來訪問文件。
os 模塊和它的子模塊 os.path 都屬于內(nèi)置模塊,不需要安裝,直接導(dǎo)入即可使用。
在 Python 程序中,使用 import 語句導(dǎo)入 os 模塊后,既可以使用 os 模塊提供的屬性和方法,又可以使用 os.path 模塊提供的屬性和方法。
導(dǎo)入os 模塊的代碼如下:
import os # 說明:導(dǎo)入 os 模塊后,也可以使用其子模塊 os.path。
如果在程序中,只涉及到 os.path 模塊的內(nèi)容,也可以直接導(dǎo)入 os.path,代碼如下:
import os.path
使用上面的代碼導(dǎo)入 os.path 模塊后,就可以使用該模塊提供的屬性和方法了。如果不確定該模塊都提供了哪些屬性和方法,可以使用 Python 的內(nèi)置函數(shù) dir() 獲取其全部方法列表,代碼如下:
import os.path # 操作路徑的模塊 print(dir(os.path))
程序運行結(jié)果如下:
二、常用方法
2.1 exists()方法
判斷路徑是否存在(準確)
exists() 方法用于判斷路徑(文件或目錄)是否存在,如果存在則返回 True ;不存在則返回 False。如果是斷開的符號鏈接,也返回 False。
語法格式如下:
os.path.exists(path)
參數(shù)說明:
- path:表示要判斷的路徑,可以采用絕對路徑,也可以采用相對路徑。
- 返回值:如果給定的路徑存在,則返回 True,否則返回 False。
注意:在使用 exists() 方法時,如果某些平臺未授予 os.stat() 對所請求文件有執(zhí)行的權(quán)限,即使路徑真實存在,使用該方法也會返回 False。
使用 exists() 方法判斷保存在 E:\Code\lesson
目錄下的 main.py
文件是否存在,代碼如下:
import os.path # 操作路徑的模塊 path = r"E:\Code\lesson\main.py" # 文件 if os.path.exists(path): # 判斷文件是否存在 # E:\Code\lesson\main.py 文件存在 print(path, "文件存在") else: print(path, "文件不存在")
用 exists() 方法判斷 E:\Code\lesson1
目錄是否存在,代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 操作路徑的模塊 path = r"E:\Code\lesson1" # 目錄 print(os.path.exists(path)) # False if os.path.exists(path): # 判斷目錄是否存在 print(path, "目錄存在") else: # E:\Code\lesson1 目錄不存在 print(path, "目錄不存在")
2.2 isdir()方法
判斷是否為目錄
isdir() 方法用于判斷指定的路徑是否為目錄。語法格式如下:
os.path.isdir(path)
參數(shù)說明:
- path:表示要判斷的路徑,可以采用絕對路徑,也可以采用相對路徑。
- 返回值:如果給定的路徑是目錄,則返回 True,否則返回 False。
向 isdir() 方法中傳入絕對路徑,判斷該路徑是否為目錄,代碼如下:
import os.path # 導(dǎo)入os.path模塊 print(os.path.isdir(r'E:/Code/lesson/main.py')) # 判斷是否為目錄 False print(os.path.isdir(r'E:/Code/lesson/')) # 判斷是否為目錄 True
獲取指定目錄下的全部子目錄,首先應(yīng)用 os.listdir() 方法獲取指定路徑下的目錄和文件列表,然后遍歷該列表,并且將各路徑進行連接;再判斷是否為目錄,如果為目錄,則添加到指定列表;最后打印該列表,代碼如下:
import os # 文件與操作系統(tǒng)相關(guān)模塊 root = r'E:/Code/lesson' path = os.listdir(root) # 獲取指定路徑下的目錄和文件列表 list_dir = [] # 路徑列表 for item in path: # 遍歷獲取到的目錄和文件列表 p = os.path.join(root, item) # 連接目錄 if os.path.isdir(p): # 判斷是否為目錄 list_dir.append(p) print(f'目錄:{list_dir}') # 打印目錄列表
程序運行結(jié)果如下:
目錄:['E:/Code/lesson\\.idea', 'E:/Code/lesson\\python-package']
2.3 isabs()方法
判斷是否為絕對路徑
isabs() 方法用于判斷路徑是否為絕對路徑。語法格式如下:
os.path.isabs(path)
參數(shù)說明:
- path:表示要判斷的路徑,可以采用絕對路徑,也可以采用相對路徑。
- 返回值:如果給定的路徑是絕對路徑,則返回 True,否則返回 False。
說明:在 Unix 系統(tǒng)中,將以斜杠開頭的路徑視為絕對路徑;而在 Windows 系統(tǒng)中,以去除驅(qū)動器號后的(反向) 斜線開頭的視為絕對路徑。
使用 isabs() 方法分別判斷兩個文件的路徑是否為絕對路徑,如果不是絕對路徑,則轉(zhuǎn)換為絕對路徑并輸出,代碼如下:
import os.path # 操作路徑的模塊 path_list = [r'python-package/task1.py', r'E:\Code\lesson\python-package\demo', r'E:\Code\lesson\main.py'] for path in path_list: # 遍歷目錄列表 if not os.path.isabs(path): # 如果不是絕對路徑 path = os.path.abspath(path) # 轉(zhuǎn)換為絕對路徑 print(path) # 打印各個路徑
2.4 isf?ile()方法
判斷是否為普通文件
isfile() 方法用于判斷是否為普通文件。語法格式如下:
os.path.isfile(path)
參數(shù)說明:
- path:表示要判斷的路徑,可以采用絕對路徑,也可以采用相對路徑。
- 返回值:如果給定的路徑對應(yīng)的文件是普通文件,則返回 True,否則返回 False。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 print(os.path.isfile(r'E:\Code\lesson\main.py')) # 判斷是否為普通文件 True # 說明:如果指定的文件不存在,則返回False。 print(os.path.isfile(r'E:\Code\lesson\main2.py')) # False path = r'E:\Code\lesson' # 目錄 filename = 'main.py' # 文件名 # 連接目錄和文件名時,不推薦使用字符串拼接方法實現(xiàn), # 推薦使用 os.path.join()方法實現(xiàn),具體用法文本后續(xù)小節(jié)會詳細講解 print(os.path.isfile(os.path.join(path, filename))) # 判斷是否為普通文件 True
2.5 join()方法
拼接路徑
join() 方法用于將兩個或者多個路徑拼接到一起組成一個新的路徑。語法格式如下:
os.path.join(path, *paths)
參數(shù)說明:
- path:表示要拼接的文件路徑。
- *paths:表示要拼接的多個文件路徑,這些路徑間使用逗號進行分隔。如果在要拼接的路徑中,沒有一個絕對路徑,那么最后拼接出來的將是一個相對路徑。
- 返回值:拼接后的路徑。
說明:使用 os.path.join() 函數(shù)拼接路徑時,并不會檢測該路徑是否真實存在。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 print(os.path.join(r"E:\Code\lesson", "main.py")) # 拼接字符串 # 如果要拼接的路徑中,存在多個絕對路徑,那么按從左到右順序,以最后一次出現(xiàn)的絕對路徑為準, # 并且該路徑之前的參數(shù)都將被忽略,代碼如下: # C:/demo print(os.path.join('E:/Code', 'E:/Code/lesson', 'Code', 'C:/', 'demo')) # 拼接字符串
2.6 abspath()方法
獲取絕對路徑
abspath() 方法用于返回文件或者目錄的絕對路徑。語法格式如下:
os.path.abspath(path)
參數(shù)說明:
- path:表示要獲取絕對路徑的相對路徑,可以是文件也可以是目錄。
- 返回值:返回獲取到的絕對路徑。
說明:絕對路徑是指在使用文件時指定文件的實際路徑。它不依賴于當前工作目錄。
注意:abspath() 方法在獲取實際路徑時,并不會檢查路徑是否真實存在,只是把當前文件目錄與 abspath() 方法給定的路徑進行拼接。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 # E:\Code\lesson\python-package\demo4_os_path.py print(os.path.abspath(r'demo4_os_path.py')) # 打印絕對路徑 # 使用abspath() 方法獲取當前Python 文件的絕對路徑,代碼如下: print(os.path.abspath(os.path.basename(__file__))) print(os.path.abspath(__file__))
2.7 basename()方法
從一個路徑中提取文件名
basename() 方法用于從一個路徑中提取文件名。當指定的路徑是一個不包括文件名的路徑(如 E:\Code\lesson\
) 時,返回空字符串。語法格式如下:
os.path.basename(path)
參數(shù)說明:
- path:表示要提取文件名的路徑。
- 返回值:返回提取后的文件名。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 # message.txt print(os.path.basename(r"demo\message.txt")) # 打印文件名message.txt path1 = 'e:/demo/test.txt' path2 = 'e:/demo' path3 = r'E:/Code/lesson/' print(os.path.basename(path1)) # test.txt print(os.path.basename(path2)) # demo # 如果path 以/或 \ 結(jié)尾,那么就會返回空值 print(os.path.basename(path3)) # ""
2.8 dirname()方法
獲取路徑中的目錄
dirname() 方法用于從一個路徑中提取目錄。它相當于使用 os.path.split() 方法分割路徑后,得到的第一個元素。語法格式如下:
os.path.dirname(path)
參數(shù)說明:
- path:表示要提取目錄的路徑。
- 返回值:返回提取后的目錄。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 print(os.path.dirname(r"E:\Code\lesson\python-package\demo\message.txt")) print(os.path.dirname(r"demo/message.txt"))
2.9 split()方法
分割路徑名
split() 方法用于從一個路徑中分割出目錄和文件名。語法格式如下:
os.path.split(path)
參數(shù)說明:
- path:表示要分割的路徑,可以采用絕對路徑,也可以采用相對路徑。
- 返回值:返回一個元組,與 (os.path.dirname()、os.path.basename()) 返回的元組相同。如果指定的是一個相對路徑,并且以斜杠結(jié)尾,則返回的元組的第二個元素為空。
使用 split() 方法從絕對路徑中分割出盤符、各個文件夾名和文件名,示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 lesson_path = r'E:/Code/lesson' # 代碼的路徑 folders = [] drive, path_and_file = os.path.splitdrive(lesson_path) # 分割驅(qū)動器和目錄 folders.append(drive[0]) # 獲取驅(qū)動器中的盤符 path, file = os.path.split(path_and_file) # 分割路徑和文件名 if path != '': # 處理路徑 for i in path.split('/'): # 將路徑按/分隔 if i != '': folders.append(i) if file != '': # 處理文件名 folders.append(file) print(folders) # 打印分隔結(jié)果
2.10 splitext()方法
分割文件名和擴展名
splitext() 方法用于從一個路徑中分割基本文件名和擴展名。語法格式如下:
os.path.splitext(path)
參數(shù)說明:
path:表示要分割的路徑,可以采用絕對路徑,也可以采用相對路徑。
返回值:返回一個元組,它的第一個元素為字符串表示的基本文件名(路徑中除擴展名以外的部分),第二個元素為字符串表示的擴展名(包括 .
號)。如果指定的路徑中不包括擴展名,則返回元組的第二個元素為空字符串。
示例代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 print(os.path.splitext(r'E:/amo/test/pdf/list.docx')) # 分割絕對路徑 print(os.path.splitext(r'E:/amo/test/pdf/')) # 分割沒有文件名的絕對路徑 print(os.path.splitext(r'amo/mot_cn.txt')) # 分割相對路徑 word_path = r'E:/amo/test/pdf/list.docx' # Word文檔的路徑 split_path = os.path.splitext(word_path) # 分割Word文檔的路徑 pdf_path = split_path[0] + '.pdf' # 組合PDF文檔的路徑 print(f'生成的PDF文檔路徑:{pdf_path}')
2.11 supports_unicode_f?ilenames 屬性
標記文件系統(tǒng)是否支持 Unicode 文件名
supports_unicode_filenames 屬性用于標記當前的文件系統(tǒng)是否支持 Unicode 文件名。語法格式如下:
os.path.supports_unicode_filenames
參數(shù)說明:
- 返回值:如果文件系統(tǒng)支持 Unicode 文件名,則返回值為 True。
使用 supports_unicode_filenames 屬性判斷當前系統(tǒng)是否支持 Unicode 文件名。如果支持則創(chuàng)建 座右銘.txt
文件,否則創(chuàng)建 mot.txt
文件,代碼如下:
# -*- coding: utf-8 -*- # @Time : 2022-07-04 0:15 # @Author : AmoXiang # @File : demo4_os_path.py # @Software: PyCharm # @Blog : https://blog.csdn.net/xw1680 import os.path # 導(dǎo)入os.path模塊 filename = '' # 保存文件名的變量 print(os.path.supports_unicode_filenames) # True if os.path.supports_unicode_filenames: # 判斷是否支持Unicode文件名 filename = r'座右銘.txt' else: filename = r'mot.txt' open(filename, 'w') # 創(chuàng)建或打開文件 # 文件名為: 座右銘.txt print('文件名為:', filename) # 打印文件名
到此這篇關(guān)于Python常用基礎(chǔ)模塊之os.path模塊詳解的文章就介紹到這了,更多相關(guān)Python的os.path模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3調(diào)用ansible?api使用實例例說明
這篇文章主要為大家介紹了python3?調(diào)用ansible?api使用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07詳解Python如何巧妙實現(xiàn)數(shù)學(xué)階乘n!
一個正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1。自然數(shù)n的階乘寫作n!,本文就給大家介紹如何使用python和第三方庫來實現(xiàn)數(shù)學(xué)運算中的階乘以及階乘累計求和2023-03-03Python語言實現(xiàn)百度語音識別API的使用實例
這篇文章主要介紹了Python語言實現(xiàn)百度語音識別API的使用實例,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12