web-dev-qa-db-ja.com

python 2.7でurllib.request.urlretrieveを使用するにはどうすればよいですか

Haarカスケード分類子を作成できるように、image-net.orgから画像をダウンロードしようとしています。私はこのチュートリアルに従っています https://www.youtube.com/watch?v=z_6fPS5tDNU&list=PLQVvvaa0QuDdttJXlLtAJxJetJcqmqlQq&index=18 しかし、python 3の代わりにpython 2.7を使用しています。したがって、チュートリアルでは、彼は次の行を持っています:

urllib.request.urlretrieve(img, pathToImage)

import urllib.requestの代わりにimport urllib2を実行したので、これを試しましたが、役に立ちません。

urllib2.urlretrieve(i, "Negatives/"+str(num)+".jpg")

前もって感謝します!

5
Loanb222

'2'なしでurllibをインポートする必要があります

import urllib
urllib.urlretrieve(i, "Negatives/"+str(num)+".jpg")
15
g1zmo

ビルドシステムが異なれば、バージョンの異なるPythonが利用可能になり、完全に制御できなくなることがわかりました。

そこで、次のようにurlretrieveを取得するようにスクリプトを調整しました。

import sys
print("Python: " + sys.version)
sys.stdout.flush()

import os, re, difflib

# because somewhere along the line they  may have deprecated `urlretrieve`
#   mentioned in docs for python [3.5.5, 3.6.6, 3.7.0, 3.8.0a0] that:
#       `[urlretrieve] might become deprecated at some point in the future.`
def UrlRetrieve(url, fname=None):
  if sys.version_info[0] <= 2:
    import urllib
    return urllib.urlretrieve(url, fname)
  Elif sys.version_info[0] <= 3:
    import urllib.request
    return urllib.request.urlretrieve(url, fname)
  else:
    import shutil
    import tempfile
    import urllib.request
    with urllib.request.urlopen(url) as response:
      if fname is None:
        with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
          shutil.copyfileobj(response, tmp_file)
          return (tmp_file.name, response.info())
      else:
        with io.open(fname) as the_file:
          shutil.copyfileobj(response, the_file)
          return (fname, response.info())

次に、次のように使用します。

url = "http://...whatever.../bootstrap.Zip"
pair = UrlRetrieve(url)

そして、私がインポートしていたのは間違いなくpython 2だったので、3つの世界でこれを行う必要がありました。

if sys.version_info[0] >= 3:
  import zipfile
  Zip_ref = zipfile.ZipFile(pair[0], 'r')
  Zip_ref.extractall(pair[0] + ".d")
  Zip_ref.close()
  import os
  os.system("2to3 -w " + pair[0] + ".d")
  sys.path.append(pair[0] + ".d")
else:
  sys.path.append(pair[0])
from bootstrap_common import *

Python 2と3の両方でurlretrieveを使用する必要がある将来のスクリプトのために、これらのスニペットハンドルを保持します。

1
Jesse Chisholm

これについて プロキシの背後にあるPython urllib urlretrieve

import urllib2

download = opener.urlretrieve(URL, "Negatives/"+str(num)+".jpg")

コードは次のように変換できます

import urllib2

with open("Negatives/"+str(num)+".jpg",'wb') as f:
    f.write(urllib2.urlopen(URL).read())
0
Johan Park