用 Python 实现文件查找
生活随笔
收集整理的這篇文章主要介紹了
用 Python 实现文件查找
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用 Python 實現文件查找(BIF實現及隊列實現)
(1)利用內置函數實現文件查找
1、功能:返回用戶輸入的文件的絕對路徑
2、設計思路:
- (1)用戶輸入在哪個盤進行查找
- (2)遍歷此盤文件,若為目標文件則輸出
- (2)無此文件,則輸出錯誤
3、實驗代碼
#查找某個目錄下的目標文件 import os #引入操作系統(tǒng)模塊 import sys #用于標準輸入輸出def search(path,name):for root, dirs, files in os.walk(path): # path 為根目錄if name in dirs or name in files:flag = 1 #判斷是否找到文件root = str(root)dirs = str(dirs)return os.path.join(root, dirs)return -1path = input('請輸入您要查找哪個盤中的文件(如:D:\\\)') print('請輸入您要查找的文件名:') name = sys.stdin.readline().rstrip() #標準輸入,其中rstrip()函數把字符串結尾的空白和回車刪除 answer = search(path,name) if answer == -1:print("查無此文件") else:print(answer)4、運行結果展示
1、無此文件
2、有此文件
(2)隊列實現文件查找
1、設計思路
定義隊列 ALLFiles 存儲所有文件while ALLFiles 不為空if pop 為目錄then 將目錄內所有文件入隊elesif pop 為文件then if 為目標文件then breakend 輸出路徑2、實驗代碼
#查找某個目錄下的目標文件 import os #引入操作系統(tǒng)模塊 import sys #用于標準輸入輸出 import easygui as g #引入圖形用戶界面def search(path1,name):Allfiles = [] #創(chuàng)建隊列Allfiles.append(path1)while len(Allfiles) != 0: #當隊列中為空的時候跳出循環(huán)path =Allfiles.pop(0) #從隊列中彈出首個路徑if os.path.isdir(path): #判斷路徑是否為目錄ALLFilePath =os.listdir(path) #若是目錄,遍歷將里面所有文件入隊for line in ALLFilePath:newPath =path +"\\"+line #形成絕對路徑Allfiles.append(newPath)else: #如果是一個文件,判斷是否為目標文件target = os.path.basename(path)if target == name:return pathreturn -1path = g.enterbox(msg='請輸入文件目錄(如:D:DEV)') name = g.enterbox(msg='請輸入您要查找的文件名:') answer = search(path,name) if answer == -1:g.msgbox("查無此文件",'查找錯誤') else:g.msgbox(answer,'返回路徑')3、運行結果
有此文件
無此文件
遇到問題及解決方法
- 編譯錯誤:
解決方法:os.path.join() 的參數是 str 型, 添加代碼root = str(root) dirs = str(dirs) - 縮進錯誤:
解決方法:為了看看它能輸出多少,我等待了五分鐘,它還沒有結束;結果把if name in dirs or name in files:語句重新打了一遍就可以了,應該是縮進的錯誤 - 答案錯誤:把相同目錄下的其他文件也輸出出來了
解決方法:
os.walk() 的 dirs 參數 才是返回目錄,將print(os.path.join(root, files))改為print(os.path.join(root, dirs)) - 答案錯誤:輸出的路徑不是絕對路徑
解決方法:將for root, dirs, files in os.walk('/'): # / 為根目錄 改為 for root, dirs, files in os.walk(path): # path 為根目錄
心得體會
- 代碼雖然很短,但是完成它的過程很不容易
- Python 中 循環(huán)和 if 分支后不用加大括號,但是需要: ,而且縮進要十分注意
- Python 不用定義類型并不代表變量沒有類型,使用變量前需要先賦值
- 序列包含 列表、元組和字符串
列表主要標志是[ ],是一個打了激素的數組,什么東西都能往里裝
元組和字符串都是戴上了枷鎖的列表;元組標志是( ) 和 ,,其元素不可改變;字符串不能輕易修改
三者共同點:
1、都可以通過索引得到一個元素
2、默認索引值從零開始
3、可以通過分片的方式得到一個范圍內元素的集合
4、有很多共同操作符(重復操作符、拼接操作符、成員關系操作符等) - Python 中有很多已經定義好的 BIF ,編寫代碼時很方便
- 經常會把輸出 print() 打成 printf()
轉載于:https://www.cnblogs.com/Lclkris/p/8724711.html
總結
以上是生活随笔為你收集整理的用 Python 实现文件查找的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http协议讲解
- 下一篇: 加了try的情况下线程中抛出未捕获的异常