網站首頁 編程語言 正文
該章節將學習關于文件查找的操作,大家都知道,無論是 Linux 系統還是 Windows 系統都有基于文件名實現過濾、查找的功能。但是如果想要查找一些關于某些文件指定內容的文件,好像無論是 Linux 還是 Windows 明面上沒有這樣的功能了。這個時候就可以通過 Python 來實現這樣的功能,通過該章節的學習,就可以學習到該功能的如何利用 Python 實現這樣的操作。
文件查找操作
glob 的介紹
glob 包是一個快速查找文件夾中內容的包,可以通過模糊查找的形式找到我們想要的內容。
glob 的基本使用
導入包與模塊
from glob import glob
使用方法
glob(任意目錄)
返回內容:
指定路徑下的內容列表,不存在的路徑返回空列表。
代碼示例如下:
# coding:utf-8
import os
from glob import glob
target = os.getcwd()
result = glob(target)
print(result) # 打印輸出當前路徑的文件夾
result = glob(target + '/*')
print(result) # 打印輸出當前路徑的文件夾下的所有文件
result = glob(target + '/*.py')
print(result) # 打印輸出當前路徑的文件夾下的所有以 "py" 結尾的文件
result = glob(target + '/*.zip')
print(result) # 打印輸出當前路徑的文件夾下的所有以 "zip" 結尾的文件
result = glob(target + '/filetest*')
print(result) # # 打印輸出當前路徑的文件夾下的所有以 "filetest" 開頭的文件
運行結果如下:
查找指定的文件
已知條件:
想查找的文件名已經知道,但是目錄在哪里并不知道。
實現方法:
利用 "glob" 從最上級目錄開始查找,利用遞歸模式,不斷的查找,直到找到為止。
代碼示例如下:
# coding:utf-8
import glob
"""
獲取當前路徑下所有內容
判斷每個內容的類型(文件夾還是文件)
若是文件夾則繼續遞歸查找
"""
path = glob.os.path.join(glob.os.getcwd(), '*') # 獲取當前文件夾下的所有內容
# glob 模塊其實已經包含了 "os" 模塊
final_result = [] # 定義一個空列表,用以存儲 search() 函數查到的內容
def search(path, target): # 定義 search() 函數,傳入 "path" 文件路徑, "target" 要查找的目標文件
result = glob.glob(path)
for data in result: # for 循環判斷遞歸查到的內容是文件夾還是文件
if glob.os.path.isdir(data): # 若是文件夾,繼續將該文件夾的路徑傳給 search() 函數繼續遞歸查找
_path = glob.os.path.join(data, '*')
search(_path, target)
else: # 若是文件,則將該查詢到的文件所在路徑插入 final_result 空列表
if target in data:
final_result.append(data)
return final_result
if __name__ == '__main__':
result = search(path, target='filetest.py')
print(result)
運行結果如下:
基于文件內容查找文件
接下來我們看一下查找指定內容的文件:
已知條件:
文件中包含有某些關鍵字,但是不知道文件名和文件所在路徑
實現方法:
利用 "glob" 從最上級目錄開始查找,利用遞歸模式,不斷的查找。如果是文件夾則進入繼續查找,是文件則讀取,判斷是否包含該內容,返回該內容的文件名以及所在路徑。
其實,基于文件內容查找文件實現的方式大體與上文的查找指定文件大體相似,只不過加入了讀取文件的判斷罷了。
代碼示例如下:
# coding:utf-8
import glob
"""
獲取當前路徑下所有內容
判斷每個內容的類型(文件夾還是文件)
若是文件夾則繼續遞歸查找
"""
path = glob.os.path.join(glob.os.getcwd(), '*test04') # 因為下文捕獲不可讀文件格式太多,所以這里直接指定了 "test04" 路徑
final_result = [] # 定義一個空列表,用以存儲 search() 函數查到的內容
def search(path, target): # 定義 search() 函數,傳入 "path" 文件路徑, "target" 要查找的目標文件
result = glob.glob(path)
for data in result: # for 循環判斷遞歸查到的內容是文件夾還是文件
if glob.os.path.isdir(data): # 若是文件夾,繼續將該文件夾的路徑傳給 search() 函數繼續遞歸查找
_path = glob.os.path.join(data, '*')
search(_path, target)
else: # 若是文件,則將該查詢到的文件所在路徑插入 final_result 空列表
f = open(data, 'r') # 利用 open() 函數讀取文件,并通過 try...except... 捕獲不可讀的文件格式(.zip 格式)
try:
content = f.read()
if target in content:
final_result.append(data)
except:
print('這是不可讀文件格式的文件的所在路徑:{} '.format(data))
continue
finally:
f.close()
return final_result
if __name__ == '__main__':
result = search(path, target='測試文件')
print(result)
運行結果如下:
原文鏈接:https://blog.csdn.net/weixin_42250835/article/details/124621368
相關推薦
- 2023-11-11 tensorflow分布式報錯:tensorflow.python.framework.errors
- 2022-10-14 Go?Ginrest實現一個RESTful接口_Golang
- 2022-07-15 Golang配置解析神器go?viper使用詳解_Golang
- 2022-09-05 C語言之關于二維數組在函數中的調用問題_C 語言
- 2022-04-04 微信小程序:返回上一頁,刷新頁面內容
- 2022-06-06 max-width: 100%和width:100%的區別
- 2022-07-26 3dmax2021 中的各種顯示相關如何設置?
- 2022-10-26 Python?模擬死鎖的常見實例詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支