Python列出目录中的文件

时间:2020-02-23 14:42:54  来源:igfitidea点击:

在本教程中,我们将看到如何在Python的目录中列出所有文件。

有多种方法可以在Python中列出所有文件。

使用OS.Walk.

Python OS模块提供多个函数来获取文件列表。

列出目录中的所有文件及其子目录使用 os.walk(path)
它迭代路径和每个目录的目录树,它返回一个元组(<目录名>,<子目录>列表,<文件>列表>)

import os
 
path = '/users/apple/temp/'
 
# create empty List
listOfFiles = list()
for( directory, subdirectories, file ) in os.walk(path):
    for f in file:
        listOfFiles.append(os.path.join(directory,f))
 
for file in listOfFiles:
    print(file)

输出:

/users/apple/temp/sample1.txt
/users/apple/temp/sample2.txt
/users/apple/temp/images/image1.jpeg
/users/apple/temp/images/image2.jpeg

列出所有 .jpeg目录中的文件及其子目录使用 os.walk(path)

import os
 
path = '/users/apple/temp/'
 
# create empty List
listOfFiles = list()
for( directory, subdirectories, file ) in os.walk(path):
    for f in file:
        if '.jpeg' in f:
            listOfFiles.append(os.path.join(directory,f))
 
for file in listOfFiles:
    print(file)

输出:

/users/apple/temp/images/image1.jpeg
/users/apple/temp/images/image2.jpeg

使用OS.Listdir(路径)

你也可以使用 os.listdir(path)获取目录中的文件和子目录列表。
如果,我们在迭代时获得子目录,然后我们调用 getListOfFiles(path)递归。

以下是递归函数的实现 getListOfFiles(path)

def getListOfFiles(path): 
    
    listOfFilesInDir = os.listdir(path)
    listOfAllFiles = list()
    # Iterate over all the files
    for obj in listOfFilesInDir:
        # get absolute path
        absolutePath = os.path.join(path, obj)
        # check if absolutePath is path of directory. If yes, then call the function recursively
        if os.path.isdir(absolutePath):
            listOfAllFiles = listOfAllFiles + getListOfFiles(absolutePath)
        else:
            listOfAllFiles.append(absolutePath)
            
    return listOfAllFiles

通过路径调用上述函数。

path = '/users/apple/temp/'
 
# Get the list of all files in directory and its subdirectories
listOfFiles = getListOfFiles(path)
for f in listOfFiles:
    print(f)

使用glob.

我们可以使用Glob Module在目录及其子目录中列出文件。
它支持递归的球员使用 **
列出目录中的所有文件和子目录 glob.glob()

import glob
 
path = '/users/apple/temp/'
 
listOfFiles = [f for f in glob.glob(path + "**/*", recursive=True)]
 
for file in listOfFiles:
    print(file)

列出所有 .txt文件中的文件及其子目录

import glob
 
path = '/users/apple/temp/'
 
listOfFiles = [f for f in glob.glob(path + "**/*.txt", recursive=True)]
 
for file in listOfFiles:
    print(file)

列出目录中所有子目录的名称。

import glob
 
path = '/users/apple/temp/'
 
listOfFiles = [f for f in glob.glob(path + "**/*", recursive=True)]
 
for file in listOfFiles:
    print(file)