首页 > 解决方案 > 如何在Python目录中查找具有特定文件扩展名的所有文件

问题描述

假设我有一个文件夹,其中包含多个文件类型不同的文件:.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()

标签: pythonpython-3.xfiletypesdirectory

解决方案


将所有扩展名收集在一个字典中,然后您可以快速轻松地将它们拉出来。我正在使用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)

推荐阅读