Python中os.walk用法使用小結(jié)
os.walk() 是 Python 中用于遍歷目錄樹(shù)的強(qiáng)大函數(shù)。讓我詳細(xì)解釋每個(gè)變量返回的信息和用法:
基本概念
root: 當(dāng)前正在訪問(wèn)的目錄路徑dirs: 當(dāng)前目錄下的子目錄列表files: 當(dāng)前目錄下的文件列表
示例目錄結(jié)構(gòu)
project/
├── log_2024_01.txt
├── config.ini
├── logs/
│ ├── system.log
│ ├── app.log
│ └── archive/
│ └── old_log.txt
└── data/
├── input.csv
└── output.csv
具體例子
import os
# 假設(shè)當(dāng)前目錄結(jié)構(gòu)如上所示
log_dir_path = "./project"
for root, dirs, files in os.walk(log_dir_path):
print(f"當(dāng)前目錄: {root}")
print(f"子目錄列表: {dirs}")
print(f"文件列表: {files}")
print("-" * 50)
第一次迭代
當(dāng)前目錄: ./project 子目錄列表: ['logs', 'data'] # 當(dāng)前目錄下的子文件夾 文件列表: ['log_2024_01.txt', 'config.ini'] # 當(dāng)前目錄下的文件
第二次迭代
當(dāng)前目錄: ./project/logs 子目錄列表: ['archive'] # logs文件夾下的子目錄 文件列表: ['system.log', 'app.log'] # logs文件夾下的文件
第三次迭代
當(dāng)前目錄: ./project/logs/archive 子目錄列表: [] # 沒(méi)有子目錄 文件列表: ['old_log.txt'] # archive文件夾下的文件
第四次迭代
當(dāng)前目錄: ./project/data 子目錄列表: [] # 沒(méi)有子目錄 文件列表: ['input.csv', 'output.csv'] # data文件夾下的文件
實(shí)際應(yīng)用示例
1. 查找特定文件
import os
for root, dirs, files in os.walk("."):
for file in files:
if file.endswith(".log"):
full_path = os.path.join(root, file)
print(f"找到日志文件: {full_path}")
2. 計(jì)算目錄大小
import os
total_size = 0
for root, dirs, files in os.walk("."):
for file in files:
file_path = os.path.join(root, file)
total_size += os.path.getsize(file_path)
print(f"總大小: {total_size} 字節(jié)")
3. 遍歷時(shí)排除特定目錄
import os
exclude_dirs = ['.git', '__pycache__', 'node_modules']
for root, dirs, files in os.walk("."):
# 從 dirs 列表中移除要排除的目錄
dirs[:] = [d for d in dirs if d not in exclude_dirs]
for file in files:
print(os.path.join(root, file))
4. 獲取所有文件的完整路徑
import os
all_files = []
for root, dirs, files in os.walk("/path/to/directory"):
for file in files:
full_path = os.path.join(root, file)
all_files.append(full_path)
print(f"找到 {len(all_files)} 個(gè)文件")
重要特性
默認(rèn)是深度優(yōu)先遍歷(從上到下)
可以控制遍歷方向:
# 自頂向下遍歷(默認(rèn))
for root, dirs, files in os.walk(".", topdown=True):
pass
# 自底向上遍歷
for root, dirs, files in os.walk(".", topdown=False):
pass
修改 dirs 會(huì)影響遍歷:
for root, dirs, files in os.walk("."):
# 不遍歷隱藏目錄
dirs[:] = [d for d in dirs if not d.startswith('.')]
實(shí)際使用技巧
import os
class LogProcessor:
def __init__(self, log_dir_path):
self.log_dir_path = log_dir_path
def process_logs(self):
for root, dirs, files in os.walk(self.log_dir_path):
# 按日期處理日志
for file in files:
if file.endswith('.log'):
self._process_single_log(root, file)
def _process_single_log(self, directory, filename):
filepath = os.path.join(directory, filename)
# 處理日志文件的邏輯
print(f"處理: {filepath}")
# 使用示例
processor = LogProcessor("./logs")
processor.process_logs()
os.walk() 是一個(gè)非常實(shí)用的函數(shù),特別適合需要遞歸處理文件系統(tǒng)的場(chǎng)景,比如日志分析、文件備份、批量重命名等任務(wù)。
到此這篇關(guān)于Python中os.walk用法使用小結(jié)的文章就介紹到這了,更多相關(guān)Python os.walk用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python關(guān)于os.walk函數(shù)查找windows文件方式
- Python文件遍歷os.walk()與os.listdir()使用及說(shuō)明
- Python os.listdir與os.walk實(shí)現(xiàn)獲取路徑詳解
- python?中?os.walk()?函數(shù)詳解
- 詳解python os.walk()方法的使用
- Python使用os.listdir和os.walk獲取文件路徑
- Python使用os.listdir()和os.walk()獲取文件路徑與文件下所有目錄的方法
- python 獲取文件下所有文件或目錄os.walk()的實(shí)例
- python使用os.listdir和os.walk獲得文件的路徑的方法
- python使用os模塊的os.walk遍歷文件夾示例
相關(guān)文章
Python中reduce()函數(shù)的語(yǔ)法參數(shù)與作用詳解
這篇文章主要介紹了Python中reduce()函數(shù)的語(yǔ)法參數(shù)與作用詳解,reduce函數(shù)是通過(guò)函數(shù)對(duì)迭代器對(duì)象中的元素進(jìn)行遍歷操作,Python3.x中reduce函數(shù)已經(jīng)從內(nèi)置函數(shù)中取消了,轉(zhuǎn)而放在functools模塊中,需要的朋友可以參考下2023-08-08
Python數(shù)學(xué)建模庫(kù)StatsModels統(tǒng)計(jì)回歸簡(jiǎn)介初識(shí)
這篇文章主要為大家介紹了Python數(shù)學(xué)建模庫(kù)StatsModels統(tǒng)計(jì)回歸的基本概念,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝打擊多多進(jìn)步2021-10-10
Python在for循環(huán)中更改list值的方法【推薦】
這篇文章主要介紹了Python在for循環(huán)中更改list值的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08
剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞
這篇文章主要介紹了剖析Django中模版標(biāo)簽的解析與參數(shù)傳遞,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下2015-07-07
打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)
這篇文章主要介紹了打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2020-02-02
詳解基于Facecognition+Opencv快速搭建人臉識(shí)別及跟蹤應(yīng)用
這篇文章主要介紹了詳解基于Facecognition+Opencv快速搭建人臉識(shí)別及跟蹤應(yīng)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python中Pandas庫(kù)的數(shù)據(jù)處理與分析
Python的Pandas庫(kù)是數(shù)據(jù)科學(xué)領(lǐng)域中非常重要的一個(gè)庫(kù),它使數(shù)據(jù)清洗和分析工作變得更快更簡(jiǎn)單,Pandas結(jié)合了NumPy的高性能數(shù)組計(jì)算功能以及電子表格和關(guān)系型數(shù)據(jù)庫(kù)(如SQL)的靈活數(shù)據(jù)處理能力,需要的朋友可以參考下2023-07-07

