? ? 最近剛開(kāi)始學(xué)習(xí)Python,在學(xué)習(xí)過(guò)程中有一個(gè)小作業(yè),讓我們寫(xiě)一個(gè)檢索并輸出目錄下文件的絕對(duì)路徑的小腳本。來(lái)這里記錄一下這個(gè)過(guò)程。
?? ?在系統(tǒng)的“OS”模塊中,是有遍歷目錄這個(gè)函數(shù)的(后來(lái)才知道),先上一個(gè)我自己寫(xiě)的——利用函數(shù)的遞歸實(shí)現(xiàn)檢索并輸出文件及文件夾的絕對(duì)路徑。
#!/usr/bin/python
#coding:utf-8
import os
def panduan():
? ? pathlist = os.listdir(os.getcwd())
? ? for file in pathlist:
? ? ? ? if os.path.isdir(os.getcwd()+'/%s' % file):
? ? ? ? ? ? result.write('%s:'%file+os.getcwd()+'/%s\n'%file) #將文件夾路徑寫(xiě)入result.txt文件
? ? ? ? ? ? os.chdir(os.getcwd()+"/%s"%file)
? ? ? ? ? ? panduan()
? ? ? ? ? ? os.chdir('..')
? ? ? ? else :
? ? ? ? ? ? result.write("%s:" % file+os.getcwd()+"/%s\n"%file)
def again():
? ??try:
? ? ? ? os.chdir(raw_input('請(qǐng)輸入檢索的文件目錄:'))
? ? except OSError,e:
? ? ? ? try :
? ? ? ? ? ? os.chdir(raw_input('該目錄不存在,請(qǐng)?jiān)俅屋斎霗z索的文件目錄:'))
? ? ? ? except OSError,e:
? ? ? ? ? ? print "目錄不存在,請(qǐng)確認(rèn)文件目錄,并重新運(yùn)行腳本!"
again()
result = open('result.txt','w+')
panduan()
result.close()
? ? 值得注意的是,如果先行調(diào)用“again”函數(shù),result.txt文件就會(huì)在所輸入的目錄生成。例如,要檢索root目錄下,result.txt文件就會(huì)生成在root目錄下;后調(diào)用“again”函數(shù),result.txt文件就會(huì)生成在你當(dāng)前所在的目錄。
? ? 接下來(lái)展示一下通過(guò)“OS”模塊中的”os.walk()”進(jìn)行文件目錄檢索的程序代碼:
#!/usr/bin/python
#coding=utf8
import os
path = raw_input("請(qǐng)輸入檢索文件目錄:")
if not os.path.isdir(path):
? ? path = raw_input("該目錄不存在,請(qǐng)?jiān)俅屋斎霗z索文件目錄:")
? ? if not os.path.isdir(path):
? ? ? ? print '目錄不存在,請(qǐng)確認(rèn)文件目錄,并重新運(yùn)行腳本'
? ? ? ? exit()
result = open('result.txt','w+')
g = os.walk(path)
for path,d,filelist in g:
? ? for filename in filelist :
? ? ? ? result.write('%s:'%filename+os.path.join(path,filename))
result.close()
? ? 第一種方法在檢索一些涉及更高權(quán)限要求的文件目錄時(shí),無(wú)法全部檢索到,且代碼書(shū)寫(xiě)較復(fù)雜。相比之下,利用“OS”模塊中的“os.walk()”進(jìn)行遍歷、輸出,無(wú)論是從代碼的書(shū)寫(xiě)還是最后結(jié)果的輸出,都明顯優(yōu)于第一種利用循環(huán)語(yǔ)句進(jìn)行遞歸得到的結(jié)果。