# k.Python - 檔案系統(File System) ###### tags: `Python` ## 1.工作目錄 * <font color="#0080FF">**取得目前工作目錄**</font> ```python=+ import os os.getcwd() ``` >```'C:\\Users\\tonyc\\pythonwork\\Python_dev'``` ## * <font color="#0080FF">**取得目前工作目錄 - pathlib**</font> ```python=+ import pathlib cur_path = pathlib.Path() #建立路徑物件 cur_path.cwd() ``` >```WindowsPath('C:/Users/tonyc/pythonwork/Python_dev')``` ## * <font color="#0080FF">**工作目錄下的子目錄與檔案清單**</font> ```python=+ os.listdir(os.curdir) #os.curdir 會傳回「目前目錄」的符號 #務必使用 os.curdir 而不是 '.' 確保同一份程式碼才可在不同系統運作 ``` > ```['.ipynb_checkpoints','File_System(2020_0902).ipynb','Module(2020_0831).ipynb','namespace(2020_0831).ipynb','Program_File(2020_0901).ipynb',...]``` ## * <font color="#0080FF">**切換目前工作目錄**</font> ```python=+ os.chdir("C:\\") #注意要兩個反斜線 os.getcwd() ``` >```'C:\\'``` ## * <font color="#0080FF">**Windows 系統下的路徑**</font> ```python=+ os.chdir('C:\\Windows\\temp') os.chdir('C:/Windows/temp') #這兩種路徑在 Windows 都可以使用 ``` >```'C:\\'``` ## 2.檔案系統操作(import os) * <font color="#0080FF">**os.path.join() 依照作業系統自動建立路徑**</font> ```python=+ import os path1 = os.path.join('mydir','bin') path2 = os.path.join('utils','disktools','chkdisk') print(os.path.join(path1,path2)) #為了可攜性,較長的檔案路徑應如此連接 ``` > ```mydir/bin/utils/disktools/chkdisk``` ## * <font color="#0080FF">**os.path.split()**</font> ```python=+ print(os.path.split(os.path.join('some','directory','cat.jpg'))) #split會將basename與其他路徑切割開來,並傳回tuple #basename:路徑最後指向的資料夾或檔案名稱 ``` > ```('some\\directory', 'cat.jpg')``` ## * <font color="#0080FF">**os.path.basename()、os.path.dirname()**</font> ```python=+ #取得檔案或資料夾名稱 os.path.basename(os.path.join('some','directory','cat.jpg')) #取得路徑中不包括basename的部分 os.path.dirname(os.path.join('some','directory','cat.jpg')) ``` > ```'cat.jpg'```</br> > ```'some\\directory'``` ## * <font color="#0080FF">**os.path.splitext()**</font> ```python=+ #取得副檔名 os.path.splitext(os.path.join('some','directory','cat.jpg')) ``` > ```('some\\directory\\cat', '.jpg')``` ## * <font color="#0080FF">**os.path.abspath()**</font> ```python=+ #取得絕對路徑 os.path.abspath(os.path.join('some','directory','cat.jpg')) ``` > ```'C:\\Users\\tonyc\\pythonwork\\Python_dev\\some\\directory\\cat.jpg'``` ## * <font color="#0080FF">**os.path.commonprefix()**</font> ```python=+ #找出多個檔案的共通目錄 os.path.commonprefix(['C:\\temp\\a.jpg','C:\\temp\\b.jpg']) ``` > ```'C:\\temp\\'``` ## * <font color="#0080FF">**os.path.expanduser()**</font> ```python=+ #將路徑中「~」符號轉換為使用者個人資料夾 os.path.expanduser('~\\temp') ``` > ```'C:\\Users\\tonyc\\temp'``` ## 3.檔案系統操作 - pathlib * <font color="#0080FF">**路徑名稱處理**</font> ```python=+ from pathlib import Path cur_path = Path() #建立路徑物件 print(cur_path.joinpath('bin','utils','disktools')) #pathlib 路徑物件支援「/」算符,可得到上面同樣的效果 cur_path / 'bin' / 'utils' / 'disktools' ``` > ```bin\utils\disktools```</br> > ```WindowsPath('bin/utils/disktools')``` ## * <font color="#0080FF">**將所有資料夾或檔案拆開**</font> ```python=+ a_path = Path('bin/utils/disktools') print(a_path.parts) ``` > ```('bin', 'utils', 'disktools')``` ## * <font color="#0080FF">**相對路徑轉為絕對路徑**</font> ```python=+ a_path = Path('.') a_path.resolve() ``` > ```WindowsPath('C:/Users/tonyc/pythonwork/Python_dev')``` ## * <font color="#0080FF">**取得路徑、basename、副檔名**</font> ```python=+ a_path = Path('some','directory','path.jpg') a_path.name #取得basename print(a_path.parent) #取得不包含basename的路徑 a_path.suffix #取得副檔名 ``` > ```'path.jpg'```</br> > ```some\directory```</br> > ```'.jpg'``` ## 4.有用的操作與函式 * <font color="#0080FF">**os.pardir (parent) 上層目錄、os.curdir (current) 當前目錄**</font> ```python=+ os.path.join('C:\\Windows\\temp',os.pardir,os.curdir) #檢查路徑的終點是否為目錄 os.path.isdir(os.path.join('C:\\Windows\\temp',os.pardir,os.curdir)) ``` > ```'C:\\Windows\\temp\\..\\.' #此路徑實際指向 C:\Windows```</br> > ```True``` ## * <font color="#0080FF">**os.name 作業系統名稱**</font> ```python=+ import os os.name #大多數 Windows 作業系統都被標識為「nt」 ``` > ```'nt'``` ## * <font color="#0080FF">**(!)利用 os.name 決定根目錄的形式**</font> ```python=+ import os if os.name == 'posix': #「OS X」或「Linux / UNIX」 root_dir = '/' elif os.name == 'nt': #除了「Windows CE」以外大部分版本 root_dir = "C:\\" else: print("無法判定目前所處的作業系統!!") ``` ## * <font color="#0080FF">**sys.platform 更精確的作業系統名稱**</font> ```python=+ import sys sys.platform #只要是 win10 都會顯示 'win32'(執行64位元也一樣) ``` > ```'win32'``` ## * <font color="#0080FF">**查看Shell環境變數**</font> ```python=+ import os os.environ['PATH'] #可用來設定執行檔的搜尋路徑 ``` > ```'C:\\Users\\tonyc\\anaconda3\\envs\\tensorflow-gpu;C:\\Users\\tonyc\\anaconda3\\envs\\tensorflow-gpu\\Library\\mingw-w64\\bin;C:\\Users\\tonyc\\anaconda3\\envs\\tensorflow-gpu\\Library\\usr\\bin;``` > ```...``` ## 時間戳記 > [name=ZEOxO][time=Wed, Sep 3, 2020 20:53 PM][color=#907bf7]