patnlib-面向對象的文件系統路徑
pathlib模塊提供了一個面向對象API來解析、建立、測試和處理文件名和路徑,而不是像os.path那向使用底層字符串,進行操作。
但是此方法與os.path有許多共通之處,請看os.path.join瞭解詳情。
一、建立路徑
Path()函數
要實例化一個新路徑,可以提供一個字符串作爲第一個參數。要創建一個新路徑來指示相對於已有路徑的值,可以使用 '/'操作符擴展路徑。這個操作符的參數可以是字符串,也可以是路徑對象。
from pathlib import Path
p = Path('C:\\Users\\Administrator\\Desktop')
print(p)
p = p / 'aa.txt'
print(p)
輸出結果:
C:\Users\Administrator\Desktop
C:\Users\Administrator\Desktop/aa.txt
拼接符 ‘/’ 有以下三種操作:
Path對象 / Path對象
Path對象 / 字符串
字符串 / Path對象
此操作與os.path.join相似!對os.path.join有疑問,可參考os.path.join
二、解析路徑
路徑對象提供了一些方法和屬性可以從路徑名中抽取出部分值。例如,parts屬性可以生成根據路徑分隔符值解析得到的一個路徑段序列。
1、分解parts
>>>from pathlib import Path
>>>p = Path('C:\\Users\\Administrator\\Desktop')
>>>print(p.parts)
('C:\\', 'Users', 'Administrator', 'Desktop')
parts屬性,可以返回路徑中的每一部分.
2、父目錄parent
有兩種辦法可以從一個給定的路徑對象在文件系統層次結構上“向上”導航。這裏直接看代碼更直觀。
>>>from pathlib import Path
>>>p = Path('C:\\Users\\Administrator\\Desktop')
>>>print(p.parent)
C:\Users\Administrator
>>>print(p.parent.parent)
C:\Users
parents是一個迭代器,每調用一次,目錄向上一次。
>>>for x in p.parents:
print(x)
C:\Users\Administrator
C:\Users
C:\
這個例子迭代處理parents屬性,並打印成員值。
3、name屬性、suffix屬性、stem屬性
>>>from pathlib import Path
>>>p = Path('C:\\Users\\Administrator\\Desktop')
>>>print('{!s:<15} : {!s:>15}'.format('path', p))
>>>print('{!s:<15} : {!s:>15}'.format('name', p.name))
>>>print('{!s:<15} : {!s:>15}'.format('suffix', p.suffix))
>>>print('{!s:<15} : {!s:>15}'.format('stem', p.stem))
path : C:\Users\Administrator\Desktop\aa.txt
name : aa.txt鄭州看婦科那個醫院好 http://mobile.120zzzy.com/
suffix : .txt
stem : aa
name屬性:包含路徑的最後一部分,即最後一個路徑分隔符後面的內容(與os.path.basename()生成的值相同)
suffix屬性:目錄中最後一個部分的擴展名
stem屬性:目錄最後一個部分,沒有後綴
另外還有這兩個屬性:
with_name(name) :替換目錄最後一個部分並返回一個新的路徑
with_suffix(suffix) :替換擴展名,返回新的路徑,擴展名存在則不變
4、home()、cwd()
>>>from pathlib import Path
>>>Path.home()
WindowsPath('C:/Users/Administrator')
>>>Path.cwd()
WindowsPath('C:/Users/Administrator')
判斷路徑的類型
返回類型爲布爾值:
is_dir() 是否是目錄
is_file() 是否是普通文件
>>>from pathlib import Path
>>>p = Path('C:/Users/Administrator')
>>>p.is_dir()
True
>>>p1 = p / 'text.txt'
>>>p1.is_file()
False
resolve() 返回一個新的路徑,這個新路徑就是當前Path對象的絕對路徑
exists()屬性:該路徑是否指向現有的目錄或文件
>>>Path('C:/Users/Administrator').exists()
True
創建目錄及文件
mkdir
mkdir(parents=False,exist_ok=False) 創建目錄
parents:是否創建父目錄,True等同mkdir -p;False時,父目錄不存在,則拋出FileNotFoundError
exist_ok:在3.5版本加入。False時,路徑存在,拋出FileExistsError;True時,FileExistsError被忽略
>>> p = Path('C:/Users/Administrator/Desktop/')
>>> p = p / 'test' / 'test1'
>>> p.mkdir(parents=True,exist_ok=True) # 在桌面上創建test目錄,test內創建test1目錄
touch
touch(exist_ok=True) 創建一個文件
as_uri() 將路徑返回成URI(Uniform Resource Identifier,統一資源標識符,是一個用於標識某一互聯網資源名稱的字符串)