-1

私は他の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())

エラーは

トレースバック(最後の最後の呼び出し):ファイル "./image_test.py"、6行目、o = open('image。%s'%d.info()。gettype()、'w')IOError:[Errno 2]そのようなファイルまたはディレクトリはありません:'image.image / jpeg'

4

2 に答える 2

2

エラーが表示されます....そのようなファイルまたはディレクトリはありません:「image.image/jpeg」...したがって、明らかにgettypeは「image/jpg」のようなものを返します....それを分割して拡張子を取得できます(常に機能するとは限りません...)

o = open('image.%s' % d.info().gettype().split("/")[-1], 'w')
于 2012-12-31T01:35:38.947 に答える
1

これは、HTML MIME タイプには通常、スラッシュが含まれているためimage/jpegです。openスラッシュはファイル システム ルーティングで使用される特殊文字であるため、これは の混乱の原因となります。

たとえば、Joran が提案した方法で、ファイル名にスラッシュを避ける必要があります。

更新すべての状況で機能させるには、マップの MIME タイプ -> ファイル拡張子を取得する必要があります。Apache に 1 つあります: 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())
于 2012-12-31T01:39:30.353 に答える