python 脚本在目录中搜索特定文件类型

Tah*_*ATI 2 python python-3.x os.path

大家好,在下面的脚本中,我尝试首先列出我的主目录中的每个文件和目录,然后检查是否有任何具有特定扩展名的文件,例如(.py,.mkv)。

它适用于位于主目录中的文件,但是当我希望它检查其他目录以查看那里是否有任何文件时,它无法工作。

这是我的代码:

import os

class Sorter(object):
    path = os.environ['HOME']
    all_dirs = list()
    all_items = list()
    address = None
    movies = list()


    def __init__(self):
        pass

    def list_directories(self):
        dirs = os.listdir(self.path)
        for d in dirs:
            if os.path.isdir(os.path.join(self.path,d)):
                self.all_dirs.append(d)

            elif os.path.isfile(os.path.join(self.path,d)):
                self.all_items.append(d)

    def find_movies(self):

        for item in self.all_items:
            if os.path.splitext(os.path.join(self.path,item))[1] in ['.mp3','.mkv']:
                self.movies.append(item)
        for directory in self.all_dirs:
            try:
                os.chdir(os.path.join(self.path,directory))
                for i in directory:
                    if os.path.splitext(os.path.join(self.path,item))[1] in ['.mp3','.mkv']:
                        self.movies.append(item)
                os.chdir(self.path)
            except:
                pass
Run Code Online (Sandbox Code Playgroud)

Håk*_*Lid 6

您可以使用标准库pathlib模块并按glob文件扩展名搜索文件。

glob 方言的功能不如 bash 强大,但您可以用于**递归子目录匹配。您不能使用 bash 风格的大括号扩展*.{mp3,mkv}。相反,您可以链接多个全局搜索的结果。

from pathlib import Path

def find_files(root, extensions):
    for ext in extensions:
        yield from Path(root).glob(f'**/*.{ext}')

for movie in find_files(Path.home() / 'Videos', ['mp4', 'mkv', 'avi']):
    print(movie)
Run Code Online (Sandbox Code Playgroud)

请注意,Path 对象会重载该/运算符,因此Path.home() / 'Videos'将生成一个表示路径对象/home/username/Videos/