Скачайте и распакуйте файл с помощью Python - PullRequest
3 голосов
/ 28 июля 2011

Я пытаюсь загрузить и открыть заархивированный файл и, похоже, возникают проблемы с использованием дескриптора типа файла с zipfile.Я получаю сообщение об ошибке «AttributeError: экземпляр addinfourl не имеет атрибута« искать »» при выполнении этого:

import zipfile
import urllib2

def download(url,directory,name):
 webfile = urllib2.urlopen('http://www.sec.gov'+url)
 webfile2 = zipfile.ZipFile(webfile)
 content = zipfile.ZipFile.open(webfile2).read()
 localfile = open(directory+name, 'w')
 localfile.write(content)
 localfile.close()
 return()

download(link.get("href"),'./fails_data', link.text)

Ответы [ 2 ]

5 голосов
/ 28 июля 2011

Вы не можете найти файл urllib2.urlopen ed.Методы, которые он поддерживает, перечислены здесь: http://docs.python.org/library/urllib.html#urllib.urlopen.

Вам нужно будет извлечь файл (возможно, с помощью urllib.urlretrieve, http://docs.python.org/library/urllib.html#urllib.urlretrieve),, затем использовать zipfile для него.

В качестве альтернативы, вы можете read() файл urlopen ed, затем поместить его в StringIO, а затем использовать zipfile для этого, если вы хотите сжать данные в памяти. Также проверьте extract иextract_all методы zipfile, если вы просто хотите извлечь файл, вместо использования read.

3 голосов
/ 19 мая 2015

Собрав все вместе, мы получаем содержимое первого файла в заархивированном файле с сайта:

import urllib
import zipfile

url = 'http://www.gutenberg.lib.md.us/4/8/8/2/48824/48824-8.zip'
filehandle, _ = urllib.urlretrieve(url)
zip_file_object = zipfile.ZipFile(filehandle, 'r')
first_file = zip_file_object.namelist()[0]
file = zip_file_object.open(first_file)
content = file.read()
...