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",表示忽略文件遍歷時產(chǎn)生的錯誤,如果不為空,則提供一個自定義函數(shù)提示錯誤信息,后邊遍歷拋出異常
- 4、函數(shù)返回一個元組,該元組有3個元素,這3個元素分別表示'每次遍歷的路徑名,目錄列表和文件列表'
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)計_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)返回三個值:parent, dirnames, filenames,分別表示path的路徑、path路徑下的文件夾的名字和path路徑下文件夾以外的其他文件。
應(yīng)用1:在一個目錄下面只有文件時可以使用os.listdir()。
比如文件test_file文件中包含三個文件,即:
test_file:
test1.txt
test2.txt
test3.txt
可以使用如下代碼獲取每個文件的絕對路徑:
>>> 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)一個目錄下面既有文件又有目錄(文件夾),可使用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:編寫一個程序,用戶輸入關(guān)鍵字,查找當(dāng)前文件夾內(nèi)(如果當(dāng)前文件夾內(nèi)包含文件夾,則進(jìn)入文件夾繼續(xù)搜索)所有含有該關(guān)鍵字的文本文件(.txt后綴),要求顯示該文件所在的位置以及關(guān)鍵字在文件中的具體位置(第幾行第幾個字符)
思路:
1.先把當(dāng)前文件夾下的.txt文件以及當(dāng)前文件包含的子文件夾中的.txt文件的路徑全部保存至一個txt_list列表中;
2.以讀取的方式打開txt_list中每個路徑的文件,并將每個文件中出現(xiàn)關(guān)鍵字的行數(shù)以及關(guān)鍵字索引保存至一個字典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 個位置。'% (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í)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
- python關(guān)于os.walk函數(shù)查找windows文件方式
- Python文件遍歷os.walk()與os.listdir()使用及說明
- Python os.listdir與os.walk實(shí)現(xiàn)獲取路徑詳解
- python?中?os.walk()?函數(shù)詳解
- 詳解python os.walk()方法的使用
- Python使用os.listdir和os.walk獲取文件路徑
- python 獲取文件下所有文件或目錄os.walk()的實(shí)例
- python使用os.listdir和os.walk獲得文件的路徑的方法
- python使用os模塊的os.walk遍歷文件夾示例
- Python中os.walk用法使用小結(jié)
相關(guān)文章
基于Python+Tkinter實(shí)現(xiàn)一個簡易計算器
Tkinter作為Python的標(biāo)準(zhǔn)庫,是非常流行的Python GUI工具,同時也是非常容易學(xué)習(xí)的。本文將利用Tkinter繪制一個簡單的計算器,感興趣的可以試一試2022-01-01
詳解Python如何使用PyBuilder從零開始構(gòu)建項(xiàng)目
PyBuilder是一個用于構(gòu)建Python項(xiàng)目的工具,它提供了一種簡單而強(qiáng)大的方式來管理項(xiàng)目的依賴、運(yùn)行測試、生成文檔等任務(wù),下面就跟隨小編一起來學(xué)習(xí)一下如何使用PyBuilder構(gòu)建項(xiàng)目吧2024-03-03
python編程webpy框架模板之def with學(xué)習(xí)
這篇文章主要為大家介紹了python編程web.py框架模板之def with的學(xué)習(xí)有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
Django密碼系統(tǒng)實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Django密碼系統(tǒng)實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
IDA Pro 6.0使用Qt框架實(shí)現(xiàn)了跨平臺的UI界面
通過本文帶領(lǐng)大家學(xué)習(xí)如何使用PySide使用IDAPython為 IDA Pro 創(chuàng)建 UI 界面,對IDA Pro 6.0使用Qt 框架實(shí)現(xiàn)了跨平臺的UI相關(guān)知識感興趣的朋友一起看看吧2021-07-07
一行python實(shí)現(xiàn)樹形結(jié)構(gòu)的方法
今天小編就為大家分享一篇一行python實(shí)現(xiàn)樹形結(jié)構(gòu)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
numpy array找出符合條件的數(shù)并賦值的示例代碼
本文主要介紹了numpy array找出符合條件的數(shù)并賦值的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子
這篇文章主要介紹了Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子,需要的朋友可以參考下2014-05-05

