Python使用os.listdir()和os.walk()獲取文件路徑與文件下所有目錄的方法
在python3.6版本中去掉了os.path.walk()函數(shù)
os.walk()
函數(shù)聲明:walk(top,topdown=True,oneerror=None)
- 1、參數(shù)top表示需要遍歷的目錄樹的路徑
- 2、參數(shù)農(nóng)戶topdown默認(rèn)是"True",表示首先返回根目錄樹下的文件,然后,再遍歷目錄樹的子目錄。topdown的值為"False",則表示先遍歷目錄樹的子目錄,返回子目錄下的文件,最后返回根目錄下的文件
- 3、參數(shù)oneerror的默認(rèn)值是"None",表示忽略文件遍歷時(shí)產(chǎn)生的錯(cuò)誤,如果不為空,則提供一個(gè)自定義函數(shù)提示錯(cuò)誤信息,后邊遍歷拋出異常
- 4、函數(shù)返回一個(gè)元組,該元組有3個(gè)元素,這3個(gè)元素分別表示'每次遍歷的路徑名,目錄列表和文件列表'
os.walk()實(shí)例:
import os def walk(path): if not os.path.exists(path): return -1 for root,dirs,names in os.walk(path): for filename in names: print(os.path.join(root,filename)) #路徑和文件名連接構(gòu)成完整路徑 if __name__=='__main__': path = "C:\\Users\\Administrator\\Desktop\\2017-9-1" walk(path)
輸出結(jié)果:
C:\Users\Administrator\Desktop\2017-9-1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\2017-9-1storage.txt
C:\Users\Administrator\Desktop\2017-9-1\apk.conf
C:\Users\Administrator\Desktop\2017-9-1\數(shù)據(jù)采集導(dǎo)入質(zhì)量統(tǒng)計(jì)_2017-09-01.docx
C:\Users\Administrator\Desktop\2017-9-1\test1\2017-9-1.txt
C:\Users\Administrator\Desktop\2017-9-1\test2\2017-9-1.txt
1.os.listdir(path='')
其中參數(shù)path為需要列出的目錄路徑。該函數(shù)返回指定的文件夾包含的文件或文件夾的名字的列表。
2.walk(top, topdown=True, onerror=None, followlinks=False)
os.walk(path)返回三個(gè)值:parent, dirnames, filenames,分別表示path的路徑、path路徑下的文件夾的名字和path路徑下文件夾以外的其他文件。
應(yīng)用1:在一個(gè)目錄下面只有文件時(shí)可以使用os.listdir()。
比如文件test_file文件中包含三個(gè)文件,即:
test_file:
test1.txt
test2.txt
test3.txt
可以使用如下代碼獲取每個(gè)文件的絕對路徑:
>>> import os >>> path = r'C:\Users\XXN\Desktop\test_file' >>> for each_file in os.listdir(path): print(os.path.join(path,each_file))
結(jié)果如下:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
應(yīng)用2:當(dāng)一個(gè)目錄下面既有文件又有目錄(文件夾),可使用os.walk()讀取里面所有文件。
比如文件test_file中既包含文件也包含文件夾:
Test_file:
file1:
test1.txt
test2.txt
test3.txt
file2:
test1.txt
test2.txt
test3.txt
test1.txt
test2.txt
test3.txt
使用os.walk()可獲得:
>>> import os >>> path = r'C:\Users\XXN\Desktop\test_file' >>> for parent,dirnames,filenames in os.walk(path): print(parent,dirnames,filenames)
結(jié)果如下:
C:\Users\XXN\Desktop\test_file ['file1', 'file2'] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file1 [] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file2 [] ['test1.txt', 'test2.txt', 'test3.txt']
- parent:列出了目錄路徑下面所有存在的目錄的名稱
- dirnames:文件夾名
- filenames:列出了目錄路徑下面所有文件的名稱
通過下面代碼可獲得給定路徑下所有的文件路徑:
>>> import os >>> path = r'C:\Users\XXN\Desktop\test_file' >>> for parent,dirnames,filenames in os.walk(path): for filename in filenames: print(os.path.join(parent,filename))
結(jié)果如下:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
C:\Users\XXN\Desktop\test_file\file1\test1.txt
C:\Users\XXN\Desktop\test_file\file1\test2.txt
C:\Users\XXN\Desktop\test_file\file1\test3.txt
C:\Users\XXN\Desktop\test_file\file2\test1.txt
C:\Users\XXN\Desktop\test_file\file2\test2.txt
C:\Users\XXN\Desktop\test_file\file2\test3.txt
應(yīng)用3:編寫一個(gè)程序,用戶輸入關(guān)鍵字,查找當(dāng)前文件夾內(nèi)(如果當(dāng)前文件夾內(nèi)包含文件夾,則進(jìn)入文件夾繼續(xù)搜索)所有含有該關(guān)鍵字的文本文件(.txt后綴),要求顯示該文件所在的位置以及關(guān)鍵字在文件中的具體位置(第幾行第幾個(gè)字符)
思路:
1.先把當(dāng)前文件夾下的.txt文件以及當(dāng)前文件包含的子文件夾中的.txt文件的路徑全部保存至一個(gè)txt_list列表中;
2.以讀取的方式打開txt_list中每個(gè)路徑的文件,并將每個(gè)文件中出現(xiàn)關(guān)鍵字的行數(shù)以及關(guān)鍵字索引保存至一個(gè)字典dict_keywords中。
3.按格式輸出。
代碼演示:
import os def print_keywords(dict_keywords): keys = dict_keywords.keys() keys = sorted(keys) for each in keys: print('關(guān)鍵字出現(xiàn)在第 %s 行,第 %s 個(gè)位置。'% (each, str(dict_keywords[each]))) def line_keywords(line, keywords): key_index = [] start = line.find(keywords) while start!=-1: key_index.append(start+1) start = line.find(keywords, start+1) return key_index def file_keywords(filename, keywords): f = open(filename,'r') line = 0 dict_keywords = dict() for each_line in f: line +=1 if keywords in each_line: key_index = line_keywords(each_line, keywords) dict_keywords[line]= key_index f.close() return dict_keywords def file_search(keywords, flag): all_files = os.walk(os.getcwd()) txt_list = [] for each in all_files: for filename in each[2]: if os.path.splitext(filename)[1] == '.txt': txt_list.append(os.path.join(each[0],filename)) for each_txt_file in txt_list: dict_keywors = file_keywords(each_txt_file, keywords) print('====================================================') print('在文件【%s】中找到關(guān)鍵字【%s】' % (each_txt_file, keywords)) if flag in ['YES', 'Yes', 'yes']: print_keywords(dict_keywors) keywords = input("請將該腳本放于待查找的文件夾中,請輸入關(guān)鍵字:") flag = input("請問是否需要打印關(guān)鍵字【%s】在文件中的具體位置(YES/NO):") file_search(keywords, flag)
運(yùn)行結(jié)果如下:
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
pycharm調(diào)試時(shí)顯示圖片問題的解決
這篇文章主要介紹了pycharm調(diào)試時(shí)顯示圖片問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04使用python+pygame開發(fā)消消樂游戲附完整源碼
消消樂小游戲相信大家都玩過,大人小孩都喜歡玩的一款小游戲,那么基于程序是如何實(shí)現(xiàn)的呢?今天帶大家,用python+pygame來實(shí)現(xiàn)一下這個(gè)花里胡哨的消消樂小游戲功能,感興趣的朋友一起看看吧2021-06-06Python整數(shù)與Numpy數(shù)據(jù)溢出問題解決
這篇文章主要介紹了Python 的整數(shù)與 Numpy 的數(shù)據(jù)溢出,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸U(kuò)DP實(shí)例分析
這篇文章主要介紹了python網(wǎng)絡(luò)編程之?dāng)?shù)據(jù)傳輸U(kuò)DP實(shí)現(xiàn)方法,實(shí)例分析了Python基于UDP協(xié)議的數(shù)據(jù)傳輸實(shí)現(xiàn)方法,需要的朋友可以參考下2015-05-05Django自關(guān)聯(lián)實(shí)現(xiàn)多級聯(lián)動(dòng)查詢實(shí)例
這篇文章主要介紹了Django自關(guān)聯(lián)實(shí)現(xiàn)多級聯(lián)動(dòng)查詢實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05python爬蟲入門教程--快速理解HTTP協(xié)議(一)
http協(xié)議是互聯(lián)網(wǎng)里面最重要,最基礎(chǔ)的協(xié)議之一,我們的爬蟲需要經(jīng)常和http協(xié)議打交道。下面這篇文章主要給大家介紹了關(guān)于python爬蟲入門之快速理解HTTP協(xié)議的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05