我试图遍历文件列表,并返回那些属于媒体文件(图像,视频,gif,音频等)的文件。
看到媒体类型很多,有没有一种库或也许更好的方法来检查媒体类型,而不是列出所有类型然后对照该列表检查文件?
这是我到目前为止正在做的事情:
import os
types = [".mp3", ".mpeg", ".gif", ".jpg", ".jpeg"]
files = ["test.mp3", "test.tmp", "filename.mpg", ".AutoConfig"]
media_files = []
for file in files:
root, extention = os.path.splitext(file)
print(extention)
if extention in types:
media_files.append(file)
print("Found media files are:")
print(media_files)
但是请注意,它不包括filename.mpg
,因为我忘记将.mpg
放在我的types
列表中。 (或者,更可能的是,我不希望该列表包含一个.mpg
文件,因此也没有考虑将其列出。)
答案 0 :(得分:2)
为此,您需要获取文件的互联网媒体类型,将其用/字符分割,然后检查其是否以音频,视频,图像开头。
这是示例代码:
import mimetypes
mimetypes.init()
mimestart = mimetypes.guess_type("test.mp3")[0]
if mimestart != None:
mimestart = mimestart.split('/')[0]
if mimestart == 'audio' or mimestart == 'video' or mimestart == 'image':
print("media types")
注意::此方法假定文件类型以其扩展名而不打开实际文件,它仅基于文件扩展名
答案 1 :(得分:1)
还有另一种方法,它不基于文件扩展名而是基于使用媒体类型库pypi.org/project/python-libmagic的文件内容:
这是该库的示例代码:
import magic
magic = magic.Magic()
mimestart = magic.from_file("test.mp3").split('/')[0]
if mimestart == 'audio' or mimestart == 'video' or mimestart == 'image':
print("media types")
注意::要使用此代码示例,您需要安装python-libmagic槽式点子。
答案 2 :(得分:0)
您可以按如下方式列出媒体文件,
lsmedia.py:
import os
def lsmedia(mypath):
img_fm = (".tif", ".tiff", ".jpg", ".jpeg", ".gif", ".png", ".eps",
".raw", ".cr2", ".nef", ".orf", ".sr2", ".bmp", ".ppm", ".heif")
vid_fm = (".flv", ".avi", ".mp4", ".3gp", ".mov", ".webm", ".ogg", ".qt", ".avchd")
aud_fm = (".flac", ".mp3", ".wav", ".wma", ".aac")
media_fms = {"image": img_fm, "video": vid_fm, "audio": aud_fm}
fns = lambda path, media : [fn for fn in os.listdir(path) if any(fn.lower().endswith(media_fms[media]) for ext in media_fms[media])]
img_fns, vid_fns, aud_fns = fns(mypath, "image"), fns(mypath, "video"), fns(mypath, "audio")
print(f"State of media in '{mypath}'")
print("Images: ", len(img_fns), " | Videos: ", len(vid_fns), "| Audios: ", len(aud_fns))
return (img_fns, vid_fns, aud_fns)
mypath = "/home/DATA_Lia/data_02/sample" # define dir
(imgs, vids, auds) = lsmedia(mypath)
输出:
State of media in '/home/DATA_Lia/data_02/sample'
Images: 24 | Videos: 3 | Audios: 5