我正在尝试在具有许多子目录的目录中查找所有带有编解码器 h264 的视频文件。
我已经编写了一些适用于单个文件的部分,但我想要一个文件夹中所有子目录中所有文件的报告。
以下是我目前所拥有的:
import os
import sys
import json
inputPath = '/home/Videos/Vacation/2019 - 07/'
codec = 'h264'
type = 'video'
cmd = 'ffprobe -v quiet -show_streams -print_format json ' + inputPath
output = os.popen(cmd).read()
output = json.loads(output)
for stream in output['streams']:
if stream['codec_name'] == codec and stream['codec_type'] == type:
print(inputPath)
sys.exit(0)
但有两个问题我希望有人能帮忙:
- 目录中有空格,因此我无法将它们原样传递给命令,需要转义这些字符。有没有一种简单的方法可以在 Python 中做到这一点?
- 我需要循环遍历 mkv 和 mp4 文件的所有子目录和子子目录。处理这个问题的最佳方法是什么?
提前致谢
答案1
os.walk
就可以了。您所要做的就是指定一个起始目录和一些参数,然后在for
循环中使用它。
for dpath, dname, filenames in os.walk('/home/Videos/Vacation/2019 - 07/'):
...
从文档(https://docs.python.org/3/library/os.html):
os.walk(top, topdown=True, onerror=None, followlinks=False)
Generate the file names in a directory tree by walking the tree
either top-down or bottom-up. For each directory in the tree
rooted at directory top (including top itself), it yields a
3-tuple (dirpath, dirnames, filenames).