2012-12-31 82 views
-1

我从其他等问题复制此代码,但我不能够解决我得到简单的错误

这个错误是我的代码

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()) 

的错误是

Traceback (most recent call last): File "./image_test.py", line 6, in o = open('image.%s' % d.info().gettype(), 'w') IOError: [Errno 2] No such file or directory: 'image.image/jpeg'

回答

1

这是因为HTML MIME类型通常包括斜线,例如, image/jpeg。这会导致open混淆,因为斜杠是文件系统路由中使用的特殊字符。

您只需避免在文件名中使用斜线,例如Joran提出的方式。

UPDATE为了使其在所有情况下都能正常工作,必须获取地图MIME类型 - >文件扩展名。有一个在Apache:http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=markup。一旦你把它解析到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()) 
+0

我怎么解析它到'mimetypes'。我没有得到它 – user19140477031

+0

我用代码更新了解答它的答案。 –

2

它告诉你的错误....没有这样的文件或目录:'image.image/jpeg'...所以显然gettype返回类似“image/jpg”....你可以拆分它以获得延期(可能并不总是工作......)

o = open('image.%s' % d.info().gettype().split("/")[-1], 'w') 
+0

你说,它可能并不总是工作。有什么办法总是有效 – user19140477031