Пример Вишала, каким бы великим он ни был, сбивает с толку, когда дело доходит до имени файла, и я не вижу смысла в переопределении 'zipfile'.
Вот мой пример, который загружает zip-файл, содержащий несколько файлов, одним из которых является файл csv, который я впоследствии читаю в панде DataFrame:
from StringIO import StringIO
from zipfile import ZipFile
from urllib import urlopen
import pandas
url = urlopen("https://www.federalreserve.gov/apps/mdrm/pdf/MDRM.zip")
zf = ZipFile(StringIO(url.read()))
for item in zf.namelist():
print("File in zip: "+ item)
# find the first matching csv file in the zip:
match = [s for s in zf.namelist() if ".csv" in s][0]
# the first line of the file contains a string - that line shall de ignored, hence skiprows
df = pandas.read_csv(zf.open(match), low_memory=False, skiprows=[0])
(Обратите внимание, я использую Python2.7.13)
Это точное решение, которое сработало для меня.Я немного подправил его для версии Python 3, удалив StringIO и добавив библиотеку ввода-вывода
Версия Python 3
from io import BytesIO
from zipfile import ZipFile
import pandas
import requests
url = "https://www.nseindia.com/content/indices/mcwb_jun19.zip"
content = requests.get(url)
zf = ZipFile(BytesIO(content.content))
for item in zf.namelist():
print("File in zip: "+ item)
# find the first matching csv file in the zip:
match = [s for s in zf.namelist() if ".csv" in s][0]
# the first line of the file contains a string - that line shall de ignored, hence skiprows
df = pandas.read_csv(zf.open(match), low_memory=False, skiprows=[0])