Как прочитать файл .xls полученный из интернета?
Пытаюсь прочитать файл .xls полученный из интернета с помощью requests, чтобы в дальнейшем превратить его в массив или список словарей. Нужны из файла два столбца, без анализа данных.
Пробовал так:
import requests as r
import xlrd
data = r.get(‘ https://zniis.ru/router/router-13_05_2020.xls’)
book = xlrd.open_workbook(data)
Мне отвечает, что data имеет тип response, и не читается.
Кто уже делал подобное, как сделать парвильно?
Теперь попробовал так, работает:
import requests as r
import xlrd
data = r.get('https://zniis.ru/router/router-14_05_2020.xls', verify=False)
with open('router-14_05_2020.xls', 'wb') as f:
f.write(data.content)
book = xlrd.open_workbook('router-14_05_2020.xls')
sheet = book.sheet_by_index(0)
Но проблема в том, что я все равно, сохраняю файл.
В общем, теперь вопрос такой, как скормить библиотеке xld тип bytes, чтобы он увидел в нем .xls?
Ответы (2 шт):
В функцию xlrd.open_workbook можно передать параметр file_contents (исходный код):
file_contents – A string or an mmap.mmap object or some other behave-alike object. If file_contents is supplied, filename will not be used, except (possibly) in messages.
Думаю, будет так:
import requests as r
import xlrd
rs = r.get('https://zniis.ru/router/router-14_05_2020.xls', verify=False)
book = xlrd.open_workbook(file_contents=rs.content)
sheet = book.sheet_by_index(0)
Откройте для себя модуль Pandas - он идеально подходит для обработки, анализа и визуализации табличных данных.
import pandas as pd # pip install pandas # conda install pandas
df = pd.read_excel("https://zniis.ru/router/router-13_05_2020.xls")
дальше вы можете работать с прочитанными данными:
In [6]: df
Out[6]:
Код DEF От До Емкость (всего номеров) Оператор связи Идентификатор региона MNC \
0 900 0 61999 62000 "Т2 Мобайл" ООО 25 20
1 900 62000 62999 1000 "Т2 Мобайл" ООО 62 20
2 900 63000 99999 37000 "Т2 Мобайл" ООО 25 20
3 900 100000 199999 100000 "Т2 Мобайл" ООО 70 20
4 900 200000 299999 100000 "Т2 Мобайл" ООО 75 20
... ... ... ... ... ... ... ...
7783 999 9480000 9489999 10000 "СИМ ТЕЛЕКОМ" ООО 77 47
7784 999 9490000 9499999 10000 "МегаФон" ПАО 14 2
7785 999 9500000 9599999 100000 "СИМ ТЕЛЕКОМ" ООО 77 47
7786 999 9600000 9799999 200000 "Скартел" ООО 77 11
7787 999 9800000 9999999 200000 "Скартел" ООО 77 11
Маршрутный номер
0 D2520
1 D6220
2 D2520
3 D7020
4 D7520
... ...
7783 D7747
7784 D1402
7785 D7747
7786 D7711
7787 D7711
[7788 rows x 8 columns]