2012-07-03 41 views
5

Tôi đang làm việc trên một trang web mà người dùng tải lên video và tệp âm thanh, tôi khi được tải lên, một số trường siêu dữ liệu phổ biến phải được điền từ tệp. Tôi đã tìm thấy Hachoir và nó có vẻ tốt, nhưng với một vấn đề, để tạo ra một phân tích cú pháp cho đọc siêu dữ liệu, những gì được yêu cầu là một tên tập tin, chứ không phải là một tập tin giống như hoặc đối tượng dòng.Python: Sử dụng Hachoir, cách trích xuất siêu dữ liệu cho các đối tượng giống như tệp?

Hiện tại tôi đang sử dụng Django để phát triển web và tôi muốn tiếp tục sử dụng API FileStorage, vì vậy các tệp có thể được tải lên độc đáo với CDN.

Cách sử dụng Hachoir với tệp như đối tượng? Các sample code chúng cung cấp các tác phẩm, nhưng chỉ cho các tệp "thực".

Trả lời

4

Nhanh chóng và đoạn bẩn:

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 

Chỉ cần xử lý lỗi tốt hơn :)

Các vấn đề liên quan