pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多
在 python 當(dāng)中,如果你想控制路徑,基本上繞不開 os.path。我希望看完這篇文章以后,熟練使用 python 的你能立刻開始使用 pathlib 模塊,一刻也不要耽誤。
pathlib 相對于 os.path 有以下優(yōu)勢:
pathlib 導(dǎo)入更加清晰;
采用面向?qū)ο缶幊?#xff0c;能同時存儲更多狀態(tài),os.path 返回的通常只有一個字符串;
pathlib 使用更簡單
獲取路徑相關(guān)信息
pathlib 會把路徑相關(guān)信息都存在一個 Path 的核心類里面,比如用戶名,后綴名,上層目錄,文件創(chuàng)建時間,文件大小等等。 這些 os.path 是沒有辦法一次性都給我們的,因?yàn)?os.path 調(diào)用的函數(shù)幾乎都是返回字符串格式,不能像 Path 對象這樣保存狀態(tài)。
1, 獲取當(dāng)前文件路徑。這種操作方式可能會包含相對路徑信息。
# 獲取當(dāng)前路徑
current_path = Path(__file__)
print(current_path)
2,當(dāng)前文件夾路徑。
current_path = Path('.')
print(current_path)
3, 獲取當(dāng)前文件和文件夾的元信息。
st = current_path.stat()
print(st)
# 文件大小
print(st.st_size)
# 文件時間
print(st.st_atime)
4,Path(‘.’) 這種方式可以包含相對路徑 ../doc 等,如果要獲取絕對路徑要使用 resolve 獲取絕對路徑。
current_path.resolve()
如果路徑不存在, 是不會拋出異常的。如果想拋出異常,可以設(shè)置參數(shù) strict 設(shè)為 True,拋出 FileNotFoundError。
current_path.resolve(strict=True)
5, 獲取父目錄。這是 os.path 最被人詬病的一點(diǎn),你需要不停的通過 os.path.dirname() 去獲取父目錄,層級多了,心都碎了。 在 pathlib 里,因?yàn)椴捎玫氖菍ο笮问?#xff0c;可以直接通過 parent 屬性獲取父目錄,父目錄同時也是一個 Path 對象,照樣可以用 parent 去獲取目錄。
parent = current_path.parent.parent.parent
6, 如果需要不停的返回上一級目錄,不停的 parent 屬性也會讓人不厭其煩。pathlib 提供了一種更靈活的機(jī)制讓你去獲取高層父目錄, 就是 parents 屬性。 parents 會把從根目錄開始的所有層級都保存起來,直接通過索引獲取對應(yīng)層級就可以了。
parents = current_path.parent
first_p = parents[0]
second_p = parents[1]
這里有一點(diǎn)非常遺憾,pathlib 沒有支持逆向索引,也就是說不能通過 parents[-2] 去達(dá)到和 current_path.parent.parent 相同的效果。在實(shí)際應(yīng)用中,這種場景用得還是挺多的,需要通過某個文件獲取上層路徑,上上層路徑。
# TODO: 可以封裝的技能,目前未實(shí)現(xiàn)
parents[-3]
提供一種封裝思路:
def my_parents(self, nagtive_num):
....
return self.parents[len(current_path.parents) + nagtive_num]
還有一種思路,重寫源碼中的 __getitem__ 方法,這里不做深入闡述。
7, 獲取文件名稱
name = current_path.name
8, 獲取文件后綴名。
file_suffix = current_path.suffix
9,獲取不含后綴名的文件名。
file_without_suffix = current_path.stem
路徑操作
1,with_name, 改變文件名, 生成新路徑,實(shí)際文件不發(fā)生變化.
# 改變文件名為 new_name.py,生成新路徑,實(shí)際文件不發(fā)生變化
# 原來的文件名封裝在 current_path 對象中
with_name = current_path.with_name('new_name.py')
2, with_suffix, 改變后綴名。
# 改變后綴名,生成新路徑,實(shí)際文件不發(fā)生變化
with_suffix = current_path.with_suffix('.new_suffix')
3, 路徑拼接。 pathlib 提供了和 os.path.join() 類似的路徑拼接方式:
new_path = current_path.joinpath('join_path')
更重要的是,他提供了一種更直觀的方式 /:
new_path = current_path / 'lemon/yuze' / 'yuze_again'
這種方式的實(shí)現(xiàn)原理學(xué)過測試開發(fā)課程的同學(xué)應(yīng)該很容易想到,定義一個除法運(yùn)算的魔術(shù)方法就可以。
思考:pathlib 可以完全代替 os.path 嗎?
?
總結(jié)
以上是生活随笔為你收集整理的pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将dll制作成控件_全国首例将“影视作品
- 下一篇: mybatis字符串转成数字_计算机储存