os模塊是一個(gè)功能強(qiáng)大模塊,主要提供操作系統(tǒng)相關(guān)功能接口,例如:文件目錄操作,進(jìn)程相關(guān)操作,執(zhí)行系統(tǒng)命令,解析環(huán)境變量等。
使用os模塊,我們首先要導(dǎo)入:
import os
下面我們對(duì)這些功能逐一介紹。
目錄相關(guān)常用操作如下表:
方法 | 說(shuō)明 |
---|---|
os.getcwd() | 獲取當(dāng)前腳本工作的目錄路徑 |
os.getcwdb() | 同上,返回byte對(duì)象 |
os.chdir(path) | 修改當(dāng)前目錄為path |
os.mkdir(path, mode=0o777, *, dir_fd=None) | 創(chuàng)建目錄 |
os.makedirs(name, mode=0o777, exist_ok=False) | 創(chuàng)建多層目錄 |
os.rmdir(path, *, dir_fd=None) | 刪除目錄 |
os.removedirs(name) | 刪除多級(jí)目錄 |
os.listdir(path='.') | 返回指定目錄下所有文件 |
scandir(path='.') | 返回迭代器,內(nèi)容為指定目錄下所有文件目錄 |
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) | 修改路徑權(quán)限 |
os.rename(src, dst,...) | os模塊修改文件名 |
相關(guān)操作如下:
#開(kāi)發(fā)環(huán)境ubuntu
#獲取當(dāng)前目錄
dirname = 'test'
pwd = os.getcwd()
print('當(dāng)前工作目錄:',pwd)
path = '/home/hyg/tmp'
#獲取指定文件夾下所有文件
listf = os.listdir(path)
print(f'{path}files:{listf}')
#切換當(dāng)前工作目錄
os.chdir(path)
#查看當(dāng)前路徑:
print('切換工作目錄:',os.getcwd())
#當(dāng)前目錄下創(chuàng)建目錄
os.mkdir(dirname)
#顯示當(dāng)前目錄下文件
print(f'{path}files:{os.listdir("./")}')
#刪除目錄:
os.rmdir(dirname)
#切回當(dāng)前目錄
os.chdir(pwd)
#顯示當(dāng)前目錄
print('當(dāng)前工作目錄:',pwd)
輸出結(jié)果:
當(dāng)前工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:['1.jpg', '2.jpg']
切換工作目錄: /home/hyg/tmp
/home/hyg/tmpfiles:['test', '1.jpg', '2.jpg']
當(dāng)前工作目錄: /home/hyg/tmp
這些方法包括目錄判斷,路徑獲取,路徑拼接,文件信息獲?。?/p>
方法 | 說(shuō)明 |
---|---|
os.path.isdir(s) | 判斷是否為目錄 ,如果為目錄返回True |
os.path.isfile(s) | 判斷是否為文件 ,如果為文件返回True |
os.path.exists(path) | 判斷文件或目錄是否存在 ,存在返回True |
方法 | 說(shuō)明 |
---|---|
os.path.dirname(path) | 返回目錄所在路徑 |
os.path.split(p) | 目錄切分,返回元組(head,tail |
os.path.basename(p) | 返回最后一級(jí)目錄 |
os.path.join(a, *p) | 目錄拼接 |
os.path.abspath(path) | 獲取文件絕對(duì)路徑 |
這里我們要注意basename, split,來(lái)看兩個(gè)例子:
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')
輸出結(jié)果:
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
注意路徑及輸出格式。
關(guān)于目錄拼接:很多代碼實(shí)現(xiàn)如下面這種方式:
path = '/home/linux/test'
fpath = path + '/' + '1.txt'
print(fpath)
輸出結(jié)果:
/home/linux/test/1.txt
這種方式問(wèn)題:
1>跨平臺(tái)問(wèn)題,linux與window下目錄表達(dá)方式不一樣;
2>路徑拼接,注意目錄之間分隔符,有嚴(yán)格限制,容易出錯(cuò);
我們可以使用下面這種方式:
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)
輸出結(jié)果:
/home/linux/test/1.txt
/home/linux/test/1.txt
path的最后有沒(méi)有反斜杠,join都可以處理,但是字符串拼接這種方式顯然不行。
方法 | 說(shuō)明 |
---|---|
os.stat(path, *, dir_fd=None, follow_symlinks=True) | 獲取文件或目錄信息 |
os.path.getatime(filename) | 獲取文件最后訪問(wèn)時(shí)間 |
os.path.getctime(filename)) | 獲取文件最后改變時(shí)間 |
os.path.getmtime(filename) | 獲取文件最后修改時(shí)間 |
os.path.getsize(filename) | 獲取文件大小 |
getctime與getmtime都是獲文件最后修改時(shí)間,區(qū)別在哪里?文件修改方式:
1>文件內(nèi)容修改;對(duì)兩個(gè)方法獲取時(shí)間都有影響;
2>文件權(quán)限,用戶(hù)修改;只對(duì)getctime獲取時(shí)間有影響;
使用Python代碼驗(yàn)證:
import os
path = '/home/linux/test/1.txt'
#獲取文件修改時(shí)間
print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))
#修改文件權(quán)限
os.chmod(path, 777)
#獲取文件修改時(shí)間
print('ctime:',os.path.getctime(path), 'mtime:', os.path.getmtime(path))
#獲取文件大小
print(os.path.getsize(path))
輸出結(jié)果:
ctime: 1554518401.870203 mtime: 1554518401.870203
ctime: 1554518438.9467654 mtime: 1554518401.870203
5
方法 | 說(shuō)明 |
---|---|
os.system(command) | 執(zhí)行命令 |
os._exit(status) | 退出當(dāng)前進(jìn)程,需要添加退出狀態(tài) |
os.getenv(key, default=None) | 獲取指定環(huán)境變量 |
os.putenv(name, value, /) | 設(shè)置指定環(huán)境變量 |
os.environ | 環(huán)境變量獲取與設(shè)置 |
os._exit可以直接讓當(dāng)前運(yùn)行程序退出,并能夠添加退出狀態(tài);
我們首先來(lái)看system的使用,我們要在一直指定目錄創(chuàng)建文件,
linux下創(chuàng)建目錄的shell 命令:touch fname;
path = '/home/linux/test/tmp'
print(os.listdir(path))
fname = os.path.join(path, '1.txt')
print(fname)
#創(chuàng)建文件
os.system('/usr/bin/touch %s'%fname)
print(os.listdir(path))
輸出結(jié)果:
[]
/home/linux/test/tmp/1.txt
['1.txt']
可以看到使用system在path目錄中創(chuàng)建文件。
下面再來(lái)看環(huán)境變量設(shè)置,這里我們有兩種方式獲取環(huán)境變量:
1>os.getenv,根據(jù)環(huán)境變量名稱(chēng)直接獲取,如果沒(méi)有獲取值為None
2>os.environ,獲取系統(tǒng)所有環(huán)境變量,可以使用字典方式去獲取設(shè)置環(huán)境變量;
對(duì)應(yīng)設(shè)置環(huán)境變量,os.putenv對(duì)于某些平臺(tái)可能不支持,可以使用os.environ設(shè)置;
下面我們拉具體操作:
print('HOME=', os.getenv('HOME'))
#設(shè)置環(huán)境變量
os.putenv('Test', 'testval')
#獲取環(huán)境變量
print('Test=', os.getenv('Test'))
#使用environ
print('environ[HOME]=', os.environ['HOME'])
#設(shè)置環(huán)境變量Test
os.environ['Test'] = 'testval'
#獲取環(huán)境變量
print('Test=', os.getenv('Test'))
可以看到,在ubuntu中使用putenv不生效,我們可以使用os.environ替換。
os模塊還有很多其他常用方法與屬性,遇到問(wèn)題可以查閱官網(wǎng)文檔。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
當(dāng)前標(biāo)題:os模塊目錄操作詳解-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article30/ghspo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、電子商務(wù)、Google、企業(yè)建站、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容