pathlib—— 面向?qū)ο蟮奈募到y(tǒng)路徑
它是python3.4新增的一個(gè)標(biāo)準(zhǔn)庫,提供了不同操作系統(tǒng)下文件系統(tǒng)路徑的操作方式,有兩大類一個(gè)是純路徑不帶I/0操作,另一個(gè)可以進(jìn)行I/0的類。pathlib各個(gè)類的繼承關(guān)系如下圖:

圖來自python官方文檔
一般情況,對pathlib不熟悉,用Path就夠了,它功能足夠強(qiáng)大,個(gè)人覺得與相比os.path相比,更加人性化。下文將介紹一些常見操作:
構(gòu)建Path類路徑對象
pathlib中不區(qū)分路徑分隔符的,在win系統(tǒng)下可以直接用'/'。還可以用 / 創(chuàng)建子路徑。感覺比直接字符串拼接和利用os.path.join()更加簡潔
from pathlib import Path, PurePath
#直接傳進(jìn)一個(gè)完整字符串
p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#也可以傳進(jìn)多個(gè)字符串
p = Path('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
#也可以利用Path.joinpath()
p = Path('C:/Users/dongh/Documents).joinpath('python_learn/pathlib_/file1.txt')
#PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#利用 / 可以創(chuàng)建子路徑
p = Path('C:/Users/dongh/Documents)
p = p / 'python_learn/pathlib_/file1.txt'
print(p)
#PosixPath('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
了解對象基本情況
獲取上一級路徑
p = Path('C:/Users/dongh/Documents/python_learn/pathlib_/file1.txt')
#獲取路徑上一級目錄路徑
print(p.parent)#pathlib_\folder1
#獲取上上一級目錄路徑
print(p.parent.parent)
#結(jié)果
C:\Users\dongh\Documents\python_learn\pathlib_
C:\Users\dongh\Documents\python_learn
獲取路徑組件名字(返回的是字符串)
#獲取當(dāng)前路徑文件名的后綴名
#獲取當(dāng)前路徑文件名不帶后綴
#獲取-當(dāng)前路徑文件名帶后綴
print(p.suffix)
print(p.stem)
print(p.name)#pathlib_\folder1
#獲取上一級目錄路徑名字
print(p.parent.name)
#獲取上上一級目錄路徑名字
print(p.parent.parent.name)
#結(jié)果
.txt
file1
file1.txt
pathlib_
python_learn
將路徑分成不同組分(返回一個(gè)元組)
print(p.parts)
#('C:\\', 'Users', 'dongh', 'Documents', 'python_learn', 'pathlib_', 'file1.txt')
深入了解對象
哈哈,簡單了解對象的是不夠的~~~萬一對象不存在呢
判斷對象屬性
#判斷對象是否存在,存在返回True,反之返回False
p.exists()
#判斷對象是否是目錄,存在返回True,反之返回False
p.is_dir()
#判斷對象是否是文件,存在返回True,反之返回False
p.is_file()
遍歷文件夾下的路徑
#p指向的是一個(gè)文件不是文件夾。它的上一級才是文件
for i in p.parent.iterdir():
print(i,)
"""
C:\Users\dongh\Documents\python_learn\pathlib_\file1
C:\Users\dongh\Documents\python_learn\pathlib_\file2
C:\Users\dongh\Documents\python_learn\pathlib_\folder1
C:\Users\dongh\Documents\python_learn\pathlib_\folder2
C:\Users\dongh\Documents\python_learn\pathlib_\folder3
C:\Users\dongh\Documents\python_learn\pathlib_\test.py
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
"""
有目的尋找
#* 表示匹配任意字符串,但這只能在當(dāng)前目錄下尋找
for i in p.parent.glob('*.txt'):
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
'''
#尋找當(dāng)前路徑的下一路徑的內(nèi)容
for i in p.parent.glob('*/*.txt'):
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
'''
#尋找當(dāng)前路徑下所有符合條件文件
#' ** '意思當(dāng)前路徑和它的所有子路徑,相當(dāng)于循環(huán)匹配一遍子路徑
#和Path.rglob()效果一樣
for i in p.parent.glob('**/*.txt'):#for i in p.parent.rglob('*.txt')
print(i)
'''
C:\Users\dongh\Documents\python_learn\pathlib_\file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\file2.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\folder_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder1\sub_folder1\sub_file1.txt
C:\Users\dongh\Documents\python_learn\pathlib_\folder2\folder2.txt
'''
對對象動點(diǎn)手腳
寫入數(shù)據(jù)
#寫入二進(jìn)制數(shù)據(jù)
p.write_bytes(b'hello world!')
#寫入文本
p.write_text('hello world!')
#打開文件可以發(fā)現(xiàn)文件內(nèi)有'hello world!'。
讀取數(shù)據(jù)
#讀二進(jìn)制數(shù)據(jù)
print(p.read_bytes())
#b'hello world!'
#讀文本
p.read_text()
#'hello world!'
Path.open()和內(nèi)置open()差不多
with p.open('r') as f:
print(f.read())
#hello world!
with p.open('w') as f:
f.write('hello again!')
給對象改個(gè)名字
p.rename('new_file.txt')
#原來的'file1.txt'被改成new_file.txt',文件內(nèi)的內(nèi)容不變。
創(chuàng)造新的路徑
p.mkdir()
#將創(chuàng)建一個(gè)名為p.name的新文件夾。
p.rmdir()
#將刪除這個(gè)文件夾,它必須是空的才能夠刪除
判斷文件是否一樣
print(p.samefile('file1.txt'))
#返回True
改變新的路徑或后綴名并返回新的路徑(原來的路徑不被改變)
print(p.with_name('new_file1.txt'))
'C:/Users/dongh/Documents/python_learn/pathlib_/new_file1.txt'
print(p.with_suffix('.csv'))
'C:/Users/dongh/Documents/python_learn/pathlib_/file1.csv'
更多詳細(xì)內(nèi)容請查看python官方教程
其他文章
python制作字符表格
python爬取必應(yīng)學(xué)術(shù)
python控制臺動畫