#16 os&sys模組
前言
在編寫Python程式的時候,可能需要和作業系統進行互動,比如獲取某個目錄下的內容、更改執行目錄、更改環境變數等操作。在Python中有兩個模組將這些問題完美解決,一起看看哇!
一、os模組
os模組提供一個和作業系統的介面,想要完全瞭解它,需要檢視它的官方文件:https://docs.python.org/3.5/library/os.html
這裡列出一些常用的方法:
In [3]: import os# 匯入os模組 In [4]: os.sep# 該作業系統特定的路徑分隔符 Out[4]: '/' In [5]: os.linesep# 該作業系統的行分隔符 Out[5]: '\n' In [6]: os.pathsep# 該作業系統用於分割檔案的分隔符 Out[6]: ':' In [7]: os.name# 返回當前系統所使用的平臺(win返回nt,linux返回posix Out[7]: 'posix' In [8]: os.environ# 輸出系統環境變數
In [9]: import os In [10]: os.getcwd()# 獲取當前工作目錄 Out[10]: '/Users/minutesheep' In [11]: os.pardir# 輸出上級目錄 '..' Out[11]: '..' In [12]: os.curdir# 輸出當前目錄 '.' Out[12]: '.' In [13]: os.mkdir('test')# 建立一個資料夾,只能建立一個 In [15]: os.makedirs('test1/test2/test3')# 遞迴建立資料夾 In [16]: os.listdir()# 列出當前目錄所有檔案 In [17]: os.rmdir('test')# 刪除一個空資料夾,只能刪除一個 In [19]: os.removedirs('test1/test2/test3')# 遞迴刪除空資料夾,如果上級資料夾也為空,也刪除 In [20]: os.chdir('..')# 改變工作目錄 In [21]: os.getcwd()# 可以看到改變了 Out[21]: '/Users' In [24]: os.system('touch test.py')# 執行系統命令,這裡建立一個新的檔案,成功則返回0 Out[24]: 0 In [26]: os.stat('test.py')# 檢視檔案狀態 Out[26]: os.stat_result(st_mode=33188, st_ino=2252266, st_dev=16777223, st_nlink=1, st_uid=501, st_gid=20, st_size=0, st_atime=1549423963, st_mtime=1549423963, st_ctime=1549423963) In [27]: os.rename('test.py','new.py')# 對檔案改名 In [28]: os.remove('new.py')# 刪除一個檔案
In [29]: import os In [30]: os.system('touch test.py')# 建立一個新檔案用於操作 Out[30]: 0 In [31]: os.mkdir('test')# 建立一個資料夾用於操作 In [34]: abspath = os.path.abspath('test.py')# 返回檔案的絕對路徑 In [35]: abspath Out[35]: '/Users/minutesheep/test.py' In [37]: os.path.split(abspath)# 將一個檔案的絕對路徑分隔為元組形式,一個是目錄,一個是檔名 Out[37]: ('/Users/minutesheep', 'test.py') In [38]: os.path.dirname(abspath)# 返回路徑的上級目錄 Out[38]: '/Users/minutesheep' In [39]: os.path.basename(abspath)# 返回檔名,如果路徑以/結尾,則返回空 Out[39]: 'test.py' In [40]: os.path.exists(abspath)# 判斷路徑是否存在 Out[40]: True In [41]: os.path.isabs(abspath)# 判斷路徑是否為絕對路徑 Out[41]: True In [42]: os.path.isfile(abspath)# 判斷路徑是否為檔案 Out[42]: True In [43]: os.path.isdir('test')# 判斷路徑是否為資料夾 Out[43]: True
二、sys模組
想要完全瞭解它,請檢視其官方文件:< a href="https://docs.python.org/3.5/library/sys.html">https://docs.python.org/3.5/library/sys.html
這裡只記錄一些常用方法:
In [1]: import sys# 匯入sys模組 In [2]: sys.argv# 輸出命令列引數列表,第一個元素為當前程式本身 Out[2]: ['/Users/minutesheep/.pyenv/versions/3.5.2/bin/ipython'] In [3]: sys.version# 輸出Python版本 Out[3]: '3.5.2 (default, Feb3 2019, 22:37:21) \n[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.4)]' In [4]: sys.path# 輸出模組的搜尋路徑,這個是最常用的! In [5]: sys.platform# 返回作業系統平臺名稱 Out[5]: 'darwin'
三、專案目錄樹架構
在寫一個專案時,不可能只有一個程式檔案,往往含有許多個不同的程式檔案,這些程式檔案不能都放在同一個資料夾,需要對這些檔案進行歸類整理。通常一個專案有可執行檔案、測試檔案、原始碼檔案、配置檔案、日誌檔案、讀我檔案,這些檔案應當有詳細的分類,建議大家整理成如下目錄樹結構:
# 以SpeakLanguage專案為例: SpeakLanguage# 專案名 ├── README# 讀我檔案 ├── bin# 執行目錄 │ └── speak.py# 執行檔案 ├── conf# 配置檔案目錄 │ ├── conf1.cfg# 配置檔案1 │ └── conf2.cfg# 配置檔案2 ├── log# 日誌目錄 │ └── log.log# 日誌 ├── requirements.txt# 本專案需要的模組 └── speak_language# 原始碼目錄,通常與專案名相同 ├── chinese.py# 原始碼1 ├── english.py# 原始碼2 ├── main.py# 原始碼入口 └── test# 測試目錄,裡面含有測試檔案
1 # bin/speak.py 2 3 import os 4 import sys 5 6 BASE_DIR = os.path.dirname(os.path.dirname( 7os.path.abspath(__file__)))# 獲取專案目錄 8 9 sys.path.append(BASE_DIR)# 將專案目錄新增到模組的搜尋列表裡 10 11 if __name__ == '__main__': 12from speak_language.main import run# 從原始碼入口程式main.py中匯入run方法 13 14run()# 執行
1 # speak_language/chinese.py 2 3 def chinese(): 4print('我是小綿羊')
1 # speak_language/english.py 2 3 def english(): 4print('I am MinuteSheep')
# speak_language/main.py from speak_language import chinese from speak_language import english def run(): chinese.chinese() english.english()
1 # requirements.txt 2 3 將需要的安裝的模組列在此檔案中
# README 程式說明: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 專案環境介紹: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 需要的模組: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 專案目錄樹: xxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx -------------------------- 作者:MinuteSheep 聯絡方式:xxxxxx
# 執行結果 我是小綿羊 I am MinuteSheep