您好,登錄后才能下訂單哦!
os模塊是一個功能強大模塊,主要提供操作系統相關功能接口,例如:文件目錄操作,進程相關操作,執行系統命令,解析環境變量等。
使用os模塊,我們首先要導入:
import os
下面我們對這些功能逐一介紹。
目錄相關常用操作如下表:
方法 | 說明 |
---|---|
os.getcwd() | 獲取當前腳本工作的目錄路徑 |
os.getcwdb() | 同上,返回byte對象 |
os.chdir(path) | 修改當前目錄為path |
os.mkdir(path, mode=0o777, *, dir_fd=None) | 創建目錄 |
os.makedirs(name, mode=0o777, exist_ok=False) | 創建多層目錄 |
os.rmdir(path, *, dir_fd=None) | 刪除目錄 |
os.removedirs(name) | 刪除多級目錄 |
os.listdir(path='.') | 返回指定目錄下所有文件 |
scandir(path='.') | 返回迭代器,內容為指定目錄下所有文件目錄 |
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) | 修改路徑權限 |
os.rename(src, dst,...) | os模塊修改文件名 |
相關操作如下:
#開發環境ubuntu
#獲取當前目錄
dirname = 'test'
pwd = os.getcwd()
print('當前工作目錄:',pwd)
path = '/home/hyg/tmp'
#獲取指定文件夾下所有文件
listf = os.listdir(path)
print(f'{path}files:{listf}')
#切換當前工作目錄
os.chdir(path)
#查看當前路徑:
print('切換工作目錄:',os.getcwd())
#當前目錄下創建目錄
os.mkdir(dirname)
#顯示當前目錄下文件
print(f'{path}files:{os.listdir("./")}')
#刪除目錄:
os.rmdir(dirname)
#切回當前目錄
os.chdir(pwd)
#顯示當前目錄
print('當前工作目錄:',pwd)
輸出結果:
當前工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:['1.jpg', '2.jpg']
切換工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:['test', '1.jpg', '2.jpg']
當前工作目錄: /home/hyg/tmp
這些方法包括目錄判斷,路徑獲取,路徑拼接,文件信息獲取;
方法 | 說明 |
---|---|
os.path.isdir(s) | 判斷是否為目錄 ,如果為目錄返回True |
os.path.isfile(s) | 判斷是否為文件 ,如果為文件返回True |
os.path.exists(path) | 判斷文件或目錄是否存在 ,存在返回True |
方法 | 說明 |
---|---|
os.path.dirname(path) | 返回目錄所在路徑 |
os.path.split(p) | 目錄切分,返回元組(head,tail |
os.path.basename(p) | 返回最后一級目錄 |
os.path.join(a, *p) | 目錄拼接 |
os.path.abspath(path) | 獲取文件絕對路徑 |
這里我們要注意basename, split,來看兩個例子:
def func(path):
print(f'split :{path}, result:{os.path.split(path)}')
print(f'basename:{path}, result:{os.path.basename(path)}')
path = '/home/linux/test/1.txt'
func(path)
path = '/home/linux/test/'
func(path)
func('1.txt')
輸出結果:
split :/home/linux/test/1.txt, result:('/home/linux/test', '1.txt')
basename:/home/linux/test/1.txt, result:1.txt
split :/home/linux/test/, result:('/home/linux/test', '')
basename:/home/linux/test/, result:
split :1.txt, result:('', '1.txt')
basename:1.txt, result:1.txt
注意路徑及輸出格式。
關于目錄拼接:很多代碼實現如下面這種方式:
path = '/home/linux/test'
fpath = path + '/' + '1.txt'
print(fpath)
輸出結果:
/home/linux/test/1.txt
這種方式問題:
1>跨平臺問題,linux與window下目錄表達方式不一樣;
2>路徑拼接,注意目錄之間分隔符,有嚴格限制,容易出錯;
我們可以使用下面這種方式:
path = '/home/linux/test/'
fpath = os.path.join(path, '1.txt')
print(fpath)
path = '/home/linux/test'
fpath = os.path.join(path, '1.txt')
print(fpath)
輸出結果:
/home/linux/test/1.txt
/home/linux/test/1.txt
path的最后有沒有反斜杠,join都可以處理,但是字符串拼接這種方式顯然不行。
方法 | 說明 |
---|---|
os.stat(path, *, dir_fd=None, follow_symlinks=True) | 獲取文件或目錄信息 |
os.path.getatime(filename) | 獲取文件最后訪問時間 |
os.path.getctime(filename)) | 獲取文件最后改變時間 |
os.path.getmtime(filename) | 獲取文件最后修改時間 |
os.path.getsize(filename) | 獲取文件大小 |
getctime與getmtime都是獲文件最后修改時間,區別在哪里?文件修改方式:
1>文件內容修改;對兩個方法獲取時間都有影響;
2>文件權限,用戶修改;只對getctime獲取時間有影響;
使用Python代碼驗證:
import os
path = '/home/linux/test/1.txt'
#獲取文件修改時間
print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))
#修改文件權限
os.chmod(path, 777)
#獲取文件修改時間
print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))
#獲取文件大小
print(os.path.getsize(path))
輸出結果:
ctime: 1554518401.870203 mtime: 1554518401.870203
ctime: 1554518438.9467654 mtime: 1554518401.870203
5
方法 | 說明 |
---|---|
os.system(command) | 執行命令 |
os._exit(status) | 退出當前進程,需要添加退出狀態 |
os.getenv(key, default=None) | 獲取指定環境變量 |
os.putenv(name, value, /) | 設置指定環境變量 |
os.environ | 環境變量獲取與設置 |
os._exit可以直接讓當前運行程序退出,并能夠添加退出狀態;
我們首先來看system的使用,我們要在一直指定目錄創建文件,
linux下創建目錄的shell 命令:touch fname;
path = '/home/linux/test/tmp'
print(os.listdir(path))
fname = os.path.join(path, '1.txt')
print(fname)
#創建文件
os.system('/usr/bin/touch %s'%fname)
print(os.listdir(path))
輸出結果:
[]
/home/linux/test/tmp/1.txt
['1.txt']
可以看到使用system在path目錄中創建文件。
下面再來看環境變量設置,這里我們有兩種方式獲取環境變量:
1>os.getenv,根據環境變量名稱直接獲取,如果沒有獲取值為None
2>os.environ,獲取系統所有環境變量,可以使用字典方式去獲取設置環境變量;
對應設置環境變量,os.putenv對于某些平臺可能不支持,可以使用os.environ設置;
下面我們拉具體操作:
print('HOME=', os.getenv('HOME'))
#設置環境變量
os.putenv('Test', 'testval')
#獲取環境變量
print('Test=', os.getenv('Test'))
#使用environ
print('environ[HOME]=', os.environ['HOME'])
#設置環境變量Test
os.environ['Test'] = 'testval'
#獲取環境變量
print('Test=', os.getenv('Test'))
可以看到,在ubuntu中使用putenv不生效,我們可以使用os.environ替換。
os模塊還有很多其他常用方法與屬性,遇到問題可以查閱官網文檔。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。