pathlib介紹-比os.path更好的路徑處理方式
我們先來聊下三種操作系統windows、Mac 和 Linux,
Windows filenames:C:some_foldersome_file.txtMost other operating systems:/some_folder/some_file.txt
如上所示,帶來的一個編程小麻煩就是不同的操作系統,文件連接所用正反斜線是不一致的。
這是一個有趣的歷史:early 1980』s computer history
現在,python3有一個pathlib的模塊,可以讓你優雅的工作。
錯誤的方式:手動拼接
data_folder = "source_data/text_files/"file_to_open = data_folder + "raw_data.txt"f = open(file_to_open)print(f.read())
這樣寫,你不能讓每個操作系統都能順利執行。並會讓其他程序員用懷疑的眼光看著你。
舊的解決方式:os.path模塊
import os.pathdata_folder = os.path.join("source_data", "text_files")file_to_open = os.path.join(data_folder, "raw_data.txt")f = open(file_to_open)print(f.read())
此代碼可以在各個平台順利運行,但是反覆使用os.path.join很啰嗦,重點是一點都不優雅!
os.path有很多功能,但是比較繁瑣,導致大家雖然都知道,但是就是懶得用。
更好解決方式:pathlib模塊
python3.4+ 都自帶標準庫pathlib,所以你不需要再通過pip3 安裝,這很cool
你只需要這樣
from pathlib import Pathdata_folder = Path("source_data/text_files/")file_to_open = data_folder / "raw_data.txt"f = open(file_to_open)print(f.read())
至此,你用一個非常優雅的方式解決了一個重大問題,但是你以為pathlib僅此而已了嗎?
你可用它讀文件,而不需要open()
from pathlib import Pathdata_folder = Path("source_data/text_files/")file_to_open = data_folder / "raw_data.txt"print(file_to_open.read_text())
更cool的是,pathlib可以讓你常用的文件及路徑操作變得極為簡單快捷
from pathlib import Pathfilename = Path("source_data/text_files/raw_data.txt")print(filename.name)# prints "raw_data.txt"print(filename.suffix)# prints "txt"print(filename.stem)# prints "raw_data"if not filename.exists(): print("Oops, file doesnt exist!")else: print("Yay, the file exists!")
同學們,快去嘗試吧。這裡是官方地址:
11.1. pathlib - Object-oriented filesystem paths - Python 3.6.4 documentation
參考文章:
11.1. pathlib - Object-oriented filesystem paths - Python 3.6.4 documentation
https://medium.com/@ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f
推薦閱讀:
※黃哥Python 告訴你類到底是一個啥東東。
※在python 中如何將 list 轉化成 dictionary
※vim怎麼匹配多個相同字元並替換成字元加數字遞增的形式?
※Python的靜態方法和類成員方法
※如何使用爬蟲獲取新加坡PSI信息?