在昨天的文章里,我們說到,python官方庫中比較重要的兩個模塊是sys和os,然后在昨天的文章中列出了幾個sys模塊內(nèi)部函數(shù)的用法。今天我們來看一下另外一個重要模塊os的用法。
os模塊是直接和系統(tǒng)調(diào)用或者說系統(tǒng)提供的api打交道的模塊,因此可以把它的功能分為3大類,分別是:
十載的確山網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整確山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“確山網(wǎng)站設(shè)計”,“確山網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
下面我們來一一看這些功能常用的函數(shù)有哪些。
一般在做文件或目錄操作的時候,最常用的基本都是增刪改查,os模塊提供了對應的函數(shù)如下:
在上面的代碼中我們可以看到,os模塊提供了對文件的修改、刪除和查詢方法,對目錄提供了創(chuàng)建、刪除、修改和刪除的方法。但是沒有創(chuàng)建文件的方法,這是為什么呢?因為在python中,創(chuàng)建文件一般是通過Python提供的通用open方法來實現(xiàn)的。os.open這個方法有,但是只能打開已有的文件,在文件不存在時會報錯,而不會自動去創(chuàng)建這個文件。
來看一下幾個示例
# 創(chuàng)建文件
>>> f = open('test.txt', 'w')
>>> f.close()
>>> os.listdir()
['test.txt']
# 創(chuàng)建目錄和多級目錄
>>> os.mkdir('t1')
>>> os.makedirs('t1/t2/t3')
>>>
>>> os.listdir()
['test.txt', 't1']
>>> os.listdir('t1')
['t2']
>>> os.listdir('t1/t2')
['t3']
# 重命名文件
>>> os.rename('test.txt', 'test_rename_func.txt')
>>> os.listdir()
['t1', 'test_rename_func.txt']
# 重命名目錄
>>> os.rename('t1', 'test1')
>>> os.listdir()
['test_rename_func.txt', 'test1']
# 刪除文件
>>> os.remove('test_rename_func.txt')
>>> os.listdir()
['test1']
# 刪除目錄,此時test1為非空目錄,報錯。
>>> os.rmdir('test1')
Traceback (most recent call last):
File "", line 1, in
OSError: [Errno 39] Directory not empty: 'test1'
# 迭代刪除多個空目錄,此時要出給出多個目錄完整路徑
>>> os.removedirs('test1/t2/t3')
>>> os.listdir()
[]
在上面的示例中,我們演示了os模塊中用來增刪改查文件和目錄的相關(guān)函數(shù),最后留下一個小問題,非空的目錄該怎么刪除呢?感興趣的同學可以嘗試以下,我們明天來答疑解惑。
提到跨平臺,可能我們最常遇到的就是兩個東西,一個是換行符,一個是路徑分隔符。
在windows系統(tǒng)中,換行符是 \r\n,而Linux和Unix中,換行符是 \n。在windows中,路徑分隔符是反斜杠 \ ,例如windows系統(tǒng)下的路徑一般是"C:\windows\system32\",而Linux和Unix中,路徑分隔符是斜桿 / 。如果你寫的程序在多個平臺上都可以正常運行,一般會怎么做呢?
看了我們昨天關(guān)于sys模塊的同學可能記得,sys模塊有一個platform函數(shù),可以輸出系統(tǒng)版本,那么這個時候就可以根據(jù)它的值,來選擇對應的換行符和路徑分隔符。但是因為需要自己來判斷,還是略微有些麻煩。
作為一個程序員,當然是要把麻煩的事情簡單化,os就提供了若干個這樣的跨平臺屬性,如下所示:
我們來看一下這幾個函數(shù)的應用示例
# windows系統(tǒng)對應操作符
>>> os.sep, os.linesep, os.pathsep
('\\', '\r\n', ';')
# 切割windows路徑和拼接windows路徑
>>> os.path.split('c:\windows\system32')
('c:\\windows', 'system32')
>>>
>>> os.path.join('c:\windows', 'system32')
'c:\\windows\\system32'
# Linux系統(tǒng)對應操作符
>>> os.sep, os.linesep, os.pathsep
('/', '\n', ':')
# 切割linux路徑和拼接Linux路徑
>>> os.path.split('/root/project/module.py')
('/root/project', 'module.py')
>>>
>>> os.path.join('/root/project', 'module.py')
'/root/project/module.py'
在文章的最開始,我們說,os是一個很底層的模塊,它會和系統(tǒng)提供的API或者系統(tǒng)調(diào)用進行交互。也就是說它可以用來對系統(tǒng)進行管理。它是怎么做到的呢?os提供了一些函數(shù),可以讓你直接調(diào)用系統(tǒng)提供的命令,相當于是你直接來操作系統(tǒng)一樣。如下所示:
下面我們來看一下這兩個函數(shù)的用法:
示例1. os.system運行系統(tǒng)命令
>>> result = os.system('ls /')
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
>>> result
0
我們使用一個變量來接收命令是否正確執(zhí)行的結(jié)果。而命令執(zhí)行后的內(nèi)容會直接輸出到控制臺上。
如果我們想要把命令執(zhí)行后的內(nèi)容都收集起來呢?那么就需要用到os.popen這個函數(shù)了,用法如下:
# 所有內(nèi)容收集為一行
>>> result = os.popen('ls /').read()
>>> result
'bin\nboot\ndev\netc\nhome\nlib\nlib64\nmedia\nmnt\nopt\nproc\nroot\nrun\nsbin\nsrv\nsys\ntmp\nusr\nvar\n'
# 多行內(nèi)容以列表形式返回
>>> result = os.popen('ls /').readlines()
>>> result
['bin\n', 'boot\n', 'dev\n', 'etc\n', 'home\n', 'lib\n', 'lib64\n', 'media\n', 'mnt\n',
'opt\n', 'proc\n', 'root\n', 'run\n', 'sbin\n', 'srv\n', 'sys\n', 'tmp\n', 'usr\n', 'var\n']
上面只是演示了這樣兩個簡單的示例,但是根據(jù)這樣的用法指導,你還可以使用os的這兩個函數(shù),來調(diào)用更復雜的系統(tǒng)命令。來完成python模塊無法完成的任務。這也是為什么python被稱為 "膠水語言" 的原因,因為它可以粘合多種不同樣式的命令。
在后面的內(nèi)容中,我們可能還會更加深入的介紹這個模塊的其他函數(shù),今天的內(nèi)容就是這些,如果覺得對你有幫助,可以為阿飛點個贊。