#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, Feb  3 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(
 7     os.path.abspath(__file__)))  # 獲取項目目錄
 8 
 9 sys.path.append(BASE_DIR)  # 將項目目錄添加到模塊的搜索列表裡
10 
11 if __name__ == '__main__':
12     from speak_language.main import run  # 從源代碼入口程序main.py中導入run方法
13 
14     run()  # 執行
1 # speak_language/chinese.py
2 
3 def chinese():
4     print('我是小綿羊')
1 # speak_language/english.py
2 
3 def english():
4     print('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 
点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *