如何在Python中获取文件的内容类型?(带网址..)

6 投票
3 回答
3401 浏览
提问于 2025-04-15 18:30

假设我有一个视频文件:

http://mydomain.com/thevideofile.mp4

我想知道这个文件的头信息和内容类型。用Python来实现。但是,我不想下载整个文件。我希望它能返回:

video/mp4

编辑:这是我做的。你觉得怎么样?

f = urllib2.urlopen(url)
    params['mime'] =  f.headers['content-type']

3 个回答

0

你可以通过info()方法或者headers字典来获取视频的类型。

f=urllib2.urlopen(url)
print f.headers['Content-Type']
print f.info()

这是一个测试,使用了一个在网上随机找到的avi格式文件,大小超过600Mb。

$ cat test.py
#!/usr/bin/env python
import urllib2
url="http://www.merseypirates.com/rjnsteve/rjnsteve/oem16.avi"
f=urllib2.urlopen(url)
print f.headers['Content-Type']

$ time python test.py
video/x-msvideo

real    0m4.931s
user    0m0.115s
sys     0m0.042s

只有在文件真正被下载的时候,也就是数据包在网络中来回传输时,它才会“占用带宽”。

4

这个回答比Brian的更深入一些。使用urllib这个工具有很多好处,比如它可以自动处理重定向等问题。

import urllib2

class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

url = "http://mydomain.com/thevideofile.mp4"
head = urllib2.urlopen(HeadRequest(url))
head.read()          # This will return empty string and closes the connection
print head.headers.maintype
print head.headers.subtype
print head.headers.type
12

就像这样:

>>> import httplib
>>> conn = httplib.HTTPConnection("mydomain.com")
>>> conn.request("HEAD", "/thevideofile.mp4")
>>> res = conn.getresponse()
>>> print res.getheaders()

这段代码只会下载并打印出头部信息,因为它发出了一个HEAD请求:

这个请求会要求得到一个和GET请求相同的响应,但不包括响应的主体内容。这样做的好处是可以获取到写在响应头里的元信息,而不需要传输整个内容。

(来源于维基百科)

撰写回答