您好,登錄后才能下訂單哦!
本文與《【Java】讀取其下所有文件夾與文件的路徑》 (點(diǎn)擊打開(kāi)鏈接)為姊妹篇,主要講述Python對(duì)于文件信息的讀取操作。
Python對(duì)于文件信息的讀取操作,在其固有類(lèi)os中。
下面以讀取F盤(pán)下的所有文件夾作為例子說(shuō)明這個(gè)問(wèn)題:
Python對(duì)于文件夾的遍歷有兩種寫(xiě)法,一種是直接利用其封裝好的walk方法直接操作。
這是Python做得比Java優(yōu)勢(shì)的地方:
# -*-coding:utf-8-*- import os for root,dirs,files in os.walk("f:\\"): for dir in dirs: print os.path.join(root,dir).decode('gbk').encode('utf-8'); for file in files: print os.path.join(root,file).decode('gbk').encode('utf-8');
運(yùn)行效果如下:
上述程序,將os.walk讀取到的所有路徑root、目錄名dirs與文件名files,也就是三個(gè)文件數(shù)組利用foreach循環(huán)輸出。
join方法就是講其路徑與目錄名或者文件名連接起來(lái),組成一個(gè)完整的目錄。
后面的.decode('gbk').encode('utf-8');方法主要是給Eclipse下的PyDev控制臺(tái)用的,如果不加控制臺(tái)的輸出會(huì)出現(xiàn)亂碼,但是,如果你的Python程序是要拉到Windows的控制臺(tái)cmd,使用python xx.py運(yùn)行的話,請(qǐng)不要加這段編碼方法,同時(shí)去掉開(kāi)頭的# -*-coding:utf-8-*-。因?yàn)閏md是使用gb2312簡(jiǎn)體中文編碼的,而不是像Linux的終端是utf-8編碼。
也可以根據(jù)Java的遞歸思想,寫(xiě)成以下的形式:
# -*-coding:utf-8-*- import os; files = list(); def DirAll(pathName): if os.path.exists(pathName): fileList = os.listdir(pathName); for f in fileList: if f=="$RECYCLE.BIN" or f=="System Volume Information": continue; f=os.path.join(pathName,f); if os.path.isdir(f): DirAll(f); else: dirName=os.path.dirname(f); baseName=os.path.basename(f); if dirName.endswith(os.sep): files.append(dirName+baseName); else: files.append(dirName+os.sep+baseName); DirAll("f:\\"); for f in files: print f.decode('gbk').encode('utf-8');
運(yùn)行效果如下:
當(dāng)然,這種形式有其弊端,就是不能遍歷一些系統(tǒng)保留文件夾,如$RECYCLE.BIN、System Volume Information等,如果不寫(xiě)判斷條件,會(huì)導(dǎo)致下面的讀取出錯(cuò)。因此,以后遍歷文件夾的時(shí)候,還是建議時(shí)候上面的os.walk的方式。
不過(guò),我們可以從上面的程序看到幾個(gè)常見(jiàn)的用法,os.sep能夠直接返回文件分隔符/或者\(yùn)\、、os.path.join(文件所在目錄的路徑、文件名)能把文件所在目錄的路徑與文件名連接起來(lái),os.path.isdir(完整路徑)能判斷是否是目錄,endswith("xx")方法能判斷字符串是否以xx結(jié)束的。os.path.dirname()能得到文件所在目錄的路徑,os.path.basename()能得到文件名,os.listdir(路徑)能得到相應(yīng)的文件列表,等等。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。