Python獲取文件夾下所有文件的方法詳解

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-hant/n/136417.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BJPK的頭像BJPK
上一篇 2024-10-04 00:16
下一篇 2024-10-04 00:16

相關推薦

發表回復

登錄後才能評論