Python能夠輕鬆地遍歷文件夾下的所有文件,下面從不同的角度,詳細地講述如何在Python中獲取文件夾下所有文件。
一、使用os庫遍歷文件夾
Python中的os庫提供了許多底層的操作函數,包括文件訪問、目錄操作、進程管理等等。遍歷文件夾中的所有文件可以使用os庫中的os.listdir()函數。
import os
def get_all_files(rootdir):
fileList = []
for root, dirs, files in os.walk(rootdir):
for file in files:
filepath = os.path.join(root, file)
fileList.append(filepath)
return fileList
rootdir = "/path/to/folder"
fileList = get_all_files(rootdir)
for file in fileList:
print(file)
首先定義了一個函數get_all_files(),接受文件夾路徑,返迴文件路徑列表。os.walk()函數用來返回三元組(root,dirs,files),其中root表示正在遍歷的當前文件夾路徑,dirs表示當前路徑下所有文件夾列表,files表示當前路徑下所有文件列表。
通過os.path.join()函數,將文件夾路徑和文件名連接起來,獲取文件的完整路徑。將所有的文件路徑添加到一個列表中,最後返回。
二、使用glob庫遍歷文件夾
glob庫是Python自帶的一個文件路徑匹配工具,可以通過匹配規則獲取文件路徑。使用它可以非常方便地遍歷文件夾中的所有文件。
import glob
def get_all_files(rootdir):
fileList = []
pattern = rootdir + '/**/*'
files = glob.glob(pattern, recursive=True)
for file in files:
if not os.path.isdir(file):
fileList.append(file)
return fileList
rootdir = "/path/to/folder"
fileList = get_all_files(rootdir)
for file in fileList:
print(file)
首先定義了一個函數get_all_files(),接受文件夾路徑,返迴文件路徑列表。使用glob.glob()函數獲取符合規則的文件列表,其中pattern表示文件路徑匹配規則,recursive=True表示遞歸獲取所有文件。
由於glob.glob()函數還會獲取文件夾路徑,因此需要額外判斷文件是否為文件夾,將所有的文件路徑添加到一個列表中,最後返回。
三、使用pathlib庫遍歷文件夾
pathlib庫是Python3.4開始新增的庫,用於簡化與文件系統路徑相關的操作。使用該庫可以非常方便地遍歷文件夾中的所有文件。
from pathlib import Path
def get_all_files(rootdir):
fileList = []
for path in Path(rootdir).rglob('*'):
if path.is_file():
fileList.append(str(path))
return fileList
rootdir = "/path/to/folder"
fileList = get_all_files(rootdir)
for file in fileList:
print(file)
首先定義了一個函數get_all_files(),接受文件夾路徑,返迴文件路徑列表。使用Path().rglob()方法獲取符合規則的文件列表,其中’*’表示匹配所有文件,rglob()表示遞歸獲取所有文件。
由於Path().rglob()方法返回的是pathlib.Path對象,需要使用str()方法將其轉換為字元串,最後判斷文件是否為文件,將所有的文件路徑添加到一個列表中,最後返回。
四、使用os.scandir()替代os.listdir()
在Python 3.5中,os庫新增了一個os.scandir()函數,該函數與os.listdir()函數類似,用於遍歷文件夾中的所有文件。相比於os.listdir(),os.scandir()可以提供更好的性能,尤其是在遍歷大量文件時。
def get_all_files(rootdir):
fileList = []
for entry in os.scandir(rootdir):
if entry.is_file():
fileList.append(entry.path)
elif entry.is_dir():
sublist = get_all_files(entry.path)
fileList.extend(sublist)
return fileList
rootdir = "/path/to/folder"
fileList = get_all_files(rootdir)
for file in fileList:
print(file)
首先定義了一個函數get_all_files(),接受文件夾路徑,返迴文件路徑列表。使用os.scandir()函數獲取文件夾中所有文件和文件夾的iterable,使用entry.path獲取文件絕對路徑。
由於需要遞歸獲取所有文件,需要在遇到文件夾時,遞歸調用get_all_files()函數獲取子文件夾中的所有文件,最後將所有的文件路徑添加到一個列表中,最後返回。
五、結語
本文介紹了四種獲取文件夾下所有文件的方法,使用os庫遍歷文件夾、使用glob庫遍歷文件夾、使用pathlib庫遍歷文件夾以及使用os.scandir()替代os.listdir(),作者個人認為最為推薦使用的是pathlib庫的方法,因為它提供了非常方便的面向對象的文件系統操作方式,同時也更加Pythonic。
原創文章,作者:BJPK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136417.html