Python:使用Hachoir,如何提取文件类对象的元数据?

时间:2012-07-03 00:16:15

标签: python django stream metadata hachoir-parser

我正在使用用户上传视频和音频文件的网站,我上传时,必须从文件中填充一些常见的元数据字段。我发现Hachoir似乎很好,但有问题的是,为元数据读取创建解析器,需要的是文件名,而不是文件类或流对象。

现在我正在使用Django进行Web开发,我想继续使用FileStorage API,因此可以很好地将文件上传到CDN。

如何使用Hachoir文件像对象?它们提供的sample code有效,但仅适用于“真实”文件。

1 个答案:

答案 0 :(得分:4)

快速且脏的代码段:

from hachoir_core.error import HachoirError
from hachoir_core.stream import InputIOStream
from hachoir_parser import guessParser
from hachoir_metadata import extractMetadata


def metadata_for_filelike(filelike):
    try:
        filelike.seek(0)
    except (AttributeError, IOError):
        return None

    stream = InputIOStream(filelike, None, tags=[])
    parser = guessParser(stream)

    if not parser:
        return None

    try:
        metadata = extractMetadata(parser)
    except HachoirError:
        return None

    return metadata

只需要更好的错误处理:)