目錄路徑函數的操作?
1、參數top表示需要遍歷的目錄樹的路徑
2、參數農戶topdown默認是"True",表示首先返回根目錄樹下的文件,然后,再遍歷目錄樹的子目錄。topdown的值為"False",則表示先遍歷目錄樹的子目錄,返回子目錄下的文件,最后返回根目錄下的文件
3、參數oneerror的默認值是"None",表示忽略文件遍歷時產生的錯誤,如果不為空,則提供一個自定義函數提示錯誤信息,后邊遍歷拋出異常
4、函數返回一個元組,該元組有3個元素,這3個元素分別表示'每次遍歷的路徑名,目錄列表和文件列表'
os.walk()實例:
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)) #路徑和文件名連接構成完整路徑
if __name__=='__main__':
path = "C:\\Users\\Administrator\\Desktop\\2017-9-1"
walk(path)
輸出結果:
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\數據采集導入質量統計_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='')
其中參數path為需要列出的目錄路徑。該函數返回指定的文件夾包含的文件或文件夾的名字的列表。
2.walk(top, topdown=True, onerror=None, followlinks=False)
os.walk(path)返回三個值:parent, dirnames, filenames,分別表示path的路徑、path路徑下的文件夾的名字和path路徑下文件夾以外的其他文件。
應用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))
結果如下:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
應用2:當一個目錄下面既有文件又有目錄(文件夾),可使用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)
結果如下:
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))
結果如下:
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
應用3:編寫一個程序,用戶輸入關鍵字,查找當前文件夾內(如果當前文件夾內包含文件夾,則進入文件夾繼續搜索)所有含有該關鍵字的文本文件(.txt后綴),要求顯示該文件所在的位置以及關鍵字在文件中的具體位置(第幾行第幾個字符)
思路:
1.先把當前文件夾下的.txt文件以及當前文件包含的子文件夾中的.txt文件的路徑全部保存至一個txt_list列表中;
2.以讀取的方式打開txt_list中每個路徑的文件,并將每個文件中出現關鍵字的行數以及關鍵字索引保存至一個字典dict_keywords中。
3.按格式輸出。
代碼演示:
import os
def print_keywords(dict_keywords):
keys = dict_keywords.keys()
keys = sorted(keys)
for each in keys:
print('關鍵字出現在第 %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】中找到關鍵字【%s】' % (each_txt_file, keywords))
if flag in ['YES', 'Yes', 'yes']:
print_keywords(dict_keywors)
keywords = input("請將該腳本放于待查找的文件夾中,請輸入關鍵字:")
flag = input("請問是否需要打印關鍵字【%s】在文件中的具體位置(YES/NO):")
file_search(keywords, flag)
運行結果如下:
總結
以上就是這篇文章的全部內容了