python urllib脚本中的简单错误
我从另一个SO问题复制了这段代码,但我无法解决我遇到的错误 这是我的密码python urllib脚本中的简单错误,python,centos,urllib2,Python,Centos,Urllib2,我从另一个SO问题复制了这段代码,但我无法解决我遇到的错误 这是我的密码 import os import urllib2 import sys d = urllib2.urlopen("http://www.google.com.au/logos/2012/new_years_eve_2012_-_english_only-1049005-hp.jpg") o = open('image.%s' % d.info().gettype(), 'w') o.write(d.read()) 错误是
import os
import urllib2
import sys
d = urllib2.urlopen("http://www.google.com.au/logos/2012/new_years_eve_2012_-_english_only-1049005-hp.jpg")
o = open('image.%s' % d.info().gettype(), 'w')
o.write(d.read())
错误是
回溯(最后一次调用):文件“/image\u test.py”,第6行,
在里面
o=open('image.%s'%d.info().gettype(),'w')IOError:[Errno 2]没有这样的文件或目录:“image.image/jpeg”
它告诉你错误。。。。没有这样的文件或目录:“image.image/jpeg”。。。显然,gettype返回类似于“image/jpg”的内容。。。。您可以拆分它以获得扩展(可能不总是有效…)
这是因为HTML MIME类型通常包括斜杠,例如
image/jpeg
。由于斜杠是文件系统路由中使用的一种特殊字符,因此这会导致open
的混淆
您只需避免在文件名中使用斜杠,例如Joran建议的方式
更新为了使其在所有情况下都能工作,您必须获得映射MIME类型->文件扩展名。Apache上有一个:。将其解析为python字典后,如下所示:
import re
mimetypes = {}
with open('mime.types') as mimedata:
for line in [line.strip() for line in mimedata.readlines()]:
if line[0] == '#':
continue
# This pattern will only get the first extension in the list
pattern = re.compile(r'([^\s]+)\s+([^\s]+)')
result = pattern.match(line)
mime = result.group(1)
ext = result.group(2)
mimetypes[mime] = ext
您将按以下方式使用它:
mime = d.info().gettype()
ext = ''
if mime in mimetypes:
ext = mimetypes[mime]
o = open('data' + ext, 'w')
o.write(d.read())
你说,它可能并不总是有效的。是否有任何方法总是有效?我如何将其解析为
mimetypes
。我不明白
mime = d.info().gettype()
ext = ''
if mime in mimetypes:
ext = mimetypes[mime]
o = open('data' + ext, 'w')
o.write(d.read())