關注&置頂「Charlotte數據挖掘」
每日9:00,乾貨速遞!
大家以前用python2的時候,處理文件經常會使用open命令來讀取,但是在不同的平臺,譬如Windows、Linux、MacOS裡,文件名的路徑是不同的,在Python3裡,有一個新的模塊pathlib,可以輕鬆處理這個問題。
假設我們有這樣一個文件夾,其中包含了我們想要在Python中打開的文件:
原來的方式是這樣讀取的:
data_folder = "source_data / text_files / "file_to_open = data_folder + "raw_data.txt "f = open(file_to_open)print(f.read())這段代碼在Windows上也可以運行,因為在Windows裡調用open函數時,它可以識別任何一種斜槓,但是如果反過來,在Windows裡寫同樣的代碼:
data_folder = "source_data \\ text_files \\ "file_to_open = data_folder + "raw_data.txt "f = open(file_to_open)print(f.read())同樣功能的代碼卻沒有辦法在Mac上運行。因為在MacOS中無法識別這種斜槓
舊解決方案:Python的os.path模塊
Python的os.path模塊有很多工具可以解決這些特定於作業系統的文件系統問題。譬如os.path.join():
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())這段代碼可以在Windows和Mac上都成功運行,但是使用起來還是不夠方便,因為os.path.join() 需要將每個部分作為單獨的字符串連接起來,很冗長。
更好的解決方案:Python3的路徑庫
Python3.4引入了一個新的標準庫pathlib來處理文件路徑。只需使用正斜槓將路徑或文件名傳遞給新的Path()對象即可:
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中使用正斜槓即可,如果要添加路徑,可以直接在代碼中使用 / 運算符,就不需要一遍又一遍地輸入os.path.join(a,b)啦。
除此之外,我們可以讀取文件文本的內容,不需要open和close文件
from pathlib import Pathdata_folder = Path("source_data/text_files/")file_to_open = data_folder / "raw_data.txt"print(file_to_open.read_text())註:前面原來的方法寫的代碼都不規範,因為打開文件後沒有關閉,但是使用pathlib不需要額外加關閉這個操作。
實際上,使用pathlib可以使很多標準處理文件的模塊變得更快,也更簡單:
from pathlib import Pathfilename = Path("source_data/text_files/raw_data.txt")print(filename.name)print(filename.suffix)print(filename.stem)if not filename.exists(): print("file doesn't exist!")else: print("the file exists!")也可以將Unix路徑轉換成Windows路徑:
from pathlib import Path, PureWindowsPathfilename = Path("source_data/text_files/raw_data.txt")path_on_windows = PureWindowsPath(filename)print(path_on_windows)如果你真的想在代碼裡安全的使用反斜槓,那麼你可以將路徑聲明為Windows格式,並且pathlib可以將其轉換為在當前作業系統上適合的代碼:
from pathlib import Path, PureWindowsPath
filename = PureWindowsPath("source_data\\text_files\\raw_data.txt")
correct_path = Path(filename)
print(correct_path)甚至我們可以使用pathlib來解決相關文件路徑,解析網絡共享路徑和生成file:// urls。下面的示例將會在Web瀏覽器中打開一個本地文件,只需兩行代碼:
from pathlib import Pathimport webbrowser
filename = Path("source_data/text_files/raw_data.txt")
webbrowser.open(filename.absolute().as_uri())綜上,使用Python3中的pathlib模塊來處理文件路徑問題還是很方便滴,文中只列出一小部分,大家可以嘗試一下~
-點擊右下角 告訴大家你「在看」-