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)
您可以使用标准库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/