Python итерирует содержимое файла, возвращенное urlopen [duplicate]

Для юристов на языке программирования я просмотрел следующие разделы ECMAScript 5.1 (который легче читать, чем последнее издание), и дойдите до , задав его в списке рассылки ECMAScript ,

TL; DR : все передаются по значению, но свойства объектов - это ссылки, а определение объекта, как правило, отсутствует в стандарте.

Построение списков аргументов

Раздел 11.2.4 «Списки аргументов» говорит следующее о создании списка аргументов, состоящего всего из 1 аргумента:

Вывод ArgumentList: AssignmentExpression оценивается следующим образом:

  1. Пусть ref является результатом оценки AssignmentExpression.
  2. Пусть arg - GetValue (ref).
  3. Возвращает список, единственным элементом которого является arg.

В этом разделе также перечислены случаи, когда список аргументов имеет 0 или> 1 аргумент.

Таким образом, все передается по ссылке.

Доступ к свойствам объекта

Раздел 11.2.1 «Аксессоры свойств»

Вывод MemberExpression: MemberExpression [Expression] оценивается следующим образом:

  1. Пусть baseReference будет результатом оценки MemberExpression.
  2. Пусть baseValue будет GetValue (baseReference).
  3. Пусть свойствоNameReference является результатом вычисления выражения.
  4. Пусть свойствоNameValue будет GetValue (свойствоNameReference).
  5. Вызов CheckObjectCoercible (baseValue).
  6. Пусть свойствоNameString будет ToString (propertyNameValue).
  7. If синтаксическое производство, которое оценивается, содержится в коде строгого режима, пусть строгое истинно, иначе пусть строгое будет ложным.
  8. Возвращает значение типа Reference , базовое значение которого baseValue и ссылочным именем которого является свойствоNameString, а флаг строгого режима - строгий.

Таким образом, свойства объектов всегда доступны как рефери се.

On Reference

Описан в разделе 8.7 «Тип ссылочной спецификации», что ссылки не являются реальными типами на языке - они используются только для описания поведения delete, typeof и операторы присваивания.

Определение «Object»

В редакции 5.1 определено, что «Object - это совокупность свойств». Поэтому мы можем заключить, что значение объекта - это коллекция, но что касается того, что значение коллекции плохо определено в спецификации, и требует немного усилий для понимания.

51
задан Peter Mortensen 1 September 2010 в 00:44
поделиться

3 ответа

Я использовал модуль mechanize и его метод Browser.retrieve (). В прошлом он занимал 100% процессор и загружал вещи очень медленно, но в некоторых последних версиях исправлена ​​эта ошибка и работает очень быстро.

Пример:

import mechanize
browser = mechanize.Browser()
browser.retrieve('http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.32-rc1.tar.bz2', 'Downloads/my-new-kernel.tar.bz2')

Механизм основан на urllib2 , поэтому urllib2 также может иметь аналогичный метод ... но я не могу найти его сейчас.

6
ответ дан liori 22 August 2018 в 23:17
поделиться
  • 1
    он делает примерно то же, что предложил Алекс Мартинелли; BLOCK_SIZE = 8 * 1024 и обычно фиксируется – Antony Hatchkins 13 May 2011 в 06:14

Вы также можете использовать shutil :

import shutil
try:
    from urllib.request import urlopen # Python 3
except ImportError:
    from urllib2 import urlopen # Python 2

def get_large_file(url, file, length=16*1024):
    req = urlopen(url)
    with open(file, 'wb') as fp:
        shutil.copyfileobj(req, fp, length)
59
ответ дан Nick T 22 August 2018 в 23:17
поделиться
  • 1
    это сработало для меня. Но я думаю, что fp.close () все еще отсутствует – printminion 18 April 2011 в 22:48
  • 2
    – Antony Hatchkins 13 May 2011 в 06:07
  • 3
    russenreaktor, используя с open (...) as ...: имеет неявный метод close (), который вызывается из выражения with. – mklauber 29 August 2011 в 19:33
  • 4
  • 5
    @russenreaktor, если вы используете конструкцию: с open (...) as ...: вам не нужно вручную заботиться о закрытии. – andilabs 2 August 2013 в 13:12
  • 6
    @ LoïcG. Я думаю, вы имеете в виду req.read(CHUNK) в своем lambda – MestreLion 16 June 2014 в 07:16

Вы можете использовать urllib.retrieve () для загрузки файлов:

Пример:

try:
    from urllib import urlretrieve # Python 2

except ImportError:
    from urllib.request import urlretrieve # Python 3

url = "http://www.examplesite.com/myfile"
urlretrieve(url,"./local_file")
4
ответ дан Rybot666 22 August 2018 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: