Несмотря на то, что уже есть принятый ответ, я думал, что добавлю к телу знания, показывая, как я достиг чего-то подобного, используя пакет requests
(который иногда рассматривается как альтернатива urlib.request
).
Основа использования codecs.itercode()
для решения исходной задачи по-прежнему такая же, как в принятом ответе .
import codecs
from contextlib import closing
import csv
import requests
url = "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/file_list.csv"
with closing(requests.get(url, stream=True)) as r:
reader = csv.reader(codecs.iterdecode(r.iter_lines(), 'utf-8'))
for row in reader:
print row
Здесь мы также видим использование потоковой передачи , предоставляемой через пакет requests
, чтобы избежать необходимости сначала загружать весь файл по сети в память (что может потребоваться много времени, если файл большой).
Я думал, что это может быть полезно, поскольку это помогло мне, поскольку я использовал requests
, а не urllib.request
в Python 3.6.
Некоторые из идей (например, с использованием closing()
) выбираются из этой аналогичной записи