如何在Python中的目录中查找具有特定文件扩展名的所有文件

Posted

技术标签:

【中文标题】如何在Python中的目录中查找具有特定文件扩展名的所有文件【英文标题】:How to find all files with specific file extensions in a directory in Python 【发布时间】:2020-02-14 16:22:01 【问题描述】:

假设我有一个文件夹,其中包含多个文件类型不同的文件: .jpg、.jpeg、.png、.tif、.gif、.docx、.pptx、.xlsx、.mp4、.avi、.mpeg 等。

我应该如何设置一个在指定目录中搜​​索特定文件类型集的函数?

假设我只想要图像文件(即 jpg、jpeg、png、tif 和 gif)。 或者我只想要视频文件(.mp4、.avi、.mpeg)。

我是否必须为这些文件类型中的每一种都编写一个单独的函数? 或者我可以有一个搜索图像文件、视频文件等的函数吗?

import os

def enterFilePath():
    global filepath
    filepath = input("Please enter your file path. ")

enterFilePath()

def enterFileName():
    global name
    name = input("Name the file. "))

enterFileName()

def data_list():
    for elem in os.listdir(filepath):
        if elem.endswith('.jpg'):
            listItem = elem + '\n'
            listName = filepath + (r"\List.txt".format(name))
            writeFile = open(listName, 'a')
            writeFile.write(listItem)
            writeFile.close()
        if elem.endswith('.jpeg'):
            listItem = elem + '\n'
            listName = filepath + (r"\List.txt".format(name))
            writeFile = open(listName, 'a')
            writeFile.write(listItem)
            writeFile.close()
        if elem.endswith('.png'):
            listItem = elem + '\n'
            listName = filepath + (r"\List.txt".format(name))
            writeFile = open(listName, 'a')
            writeFile.write(listItem)
            writeFile.close()
        if elem.endswith('.tif'):
            listItem = elem + '\n'
            listName = filepath + (r"\List.txt".format(name))
            writeFile = open(listName, 'a')
            writeFile.write(listItem)
            writeFile.close()
        if elem.endswith('.gif'):
            listItem = elem + '\n'
            listName = filepath + (r"\List.txt".format(name))
            writeFile = open(listName, 'a')
            writeFile.write(listItem)
            writeFile.close()
        else:
            continue
data_list()

【问题讨论】:

glob.glob() 【参考方案1】:

在一个字典中收集你所有的扩展,然后你可以快速轻松地将它们拉出来。我正在使用os.cwd(),但您可以将其替换为您的目录。

import os

search = 

for f in os.listdir(os.getcwd()):
    fn, fe = os.path.splitext(f)
    try:
        search[fe].append(f)
    except:
        search[fe]=[f,]

# Example on how to search for your extensions and then do something
extensions = ('.png','.jpg')
for ex in extensions:
    found = search.get(ex,'')
    if found:
        print(found)

【讨论】:

如果我需要对某些文件扩展名进行分组怎么办?假设我只想要图像文件组(即 jpg、jpeg、png、tif 和 gif),而不想要视频文件(.mp4、.avi、.mpeg)。我怎么能实现这个?在您的示例中,我们将扩展名作为图像文件的列表。但是如果还有我不想要的“.mp4”和“.avi”呢? 那么你需要做的就是创建一个组列表,然后迭代并从字典中提取信息。 search = k:k[v] for k in search if k in list_of_extensions

以上是关于如何在Python中的目录中查找具有特定文件扩展名的所有文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从数组中查找具有特定扩展名的文件列表

递归查找具有特定扩展名的文件

在文件夹中查找具有特定扩展名的文件

Python获取具有特定扩展名的目录中的最新文件

搜索包含列表中的单词并具有特定文件扩展名的文件名

在所有子目录中查找具有特定扩展名的文件数