Принудительно сохранить файл xml в формате xls в Python

У меня есть этот код здесь, который загружает данные этого фонда в формате Excel 2004 xml:

import urllib2 url = 'https://www.ishares.com/us/258100/fund-download.dl' s = urllib2.urlopen(url) contents = s.read() file = open("export.xml", 'w') file.write(contents) file.close() 

Моя цель – программно преобразовать этот файл в .xls, с помощью которого я могу его прочитать в pandas DataFrame. Я знаю, что могу разобрать этот файл, используя библиотеки xml-библиотек python, однако я заметил, что если я открою файл xml и сохраню его вручную с расширением xls-файла, его можно будет прочитать pandas, и я получу желаемый результат.

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

 import os import sys folder = '~/models' for filename in os.listdir(folder): if filename.startswith('export'): infilename = filename newname = infilename.replace('newfile.xls', 'f.xls') output = os.rename(infilename, newname) 

https://www.ishares.com/us/258100/fund-download.dl

В Excel для Windows рассмотрите возможность использования Python для подключения COM к библиотеке объектов Excel с win32com модуля win32com . В частности, сохраните загруженный xml как csv, используя методы Workbooks.OpenXML и SaveAs в Excel:

 import os import win32com.client as win32 import requests as r import pandas as pd cd = os.path.dirname(os.path.abspath(__file__)) url = "http://www.ishares.com/us/258100/fund-download.dl" xmlfile = os.path.join(cd, 'iSharesDownload.xml') csvfile = os.path.join(cd, 'iSharesDownload.csv') # DOWNLOAD FILE try: rqpage = r.get(url) with open(xmlfile, 'wb') as f: f.write(rqpage.content) except Exception as e: print(e) finally: rqpage = None # EXCEL COM TO SAVE EXCEL XML AS CSV if os.path.exists(csvfile): os.remove(csvfile) try: excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.OpenXML(xmlfile) wb.SaveAs(csvfile, 6) wb.Close(True) except Exception as e: print(e) finally: # RELEASES RESOURCES wb = None excel = None # IMPORT CSV INTO PANDAS DATAFRAME df = pd.read_csv(csvfile, skiprows=8) print(df.describe()) # Weight (%) Price Coupon (%) YTM (%) Yield to Worst (%) Duration # count 625.000000 625.000000 625.000000 625.000000 625.000000 625.000000 # mean 0.159888 101.298768 6.500256 5.881168 5.313760 2.128688 # std 0.126833 10.469460 1.932744 4.059226 4.224268 1.283360 # min -0.110000 0.000000 0.000000 0.000000 -8.030000 0.000000 # 25% 0.090000 100.380000 5.130000 3.430000 3.070000 0.970000 # 50% 0.130000 102.940000 6.380000 4.930000 3.910000 2.240000 # 75% 0.190000 105.000000 7.630000 6.820000 6.070000 3.260000 # max 1.750000 128.750000 12.500000 40.900000 40.900000 5.060000 

С Excel для MAC рассмотрите решение VBA, поскольку VBA является наиболее распространенным языком для интерфейса с библиотекой объектов Excel. Ниже загружает iShares xml, а затем сохраняет его как csv для импорта pandas с использованием методов OpenXML и SaveAs .

Примечание. Это не проверено на Mac, но, надеюсь, доступен объект Microsoft.XMLHTTP .

VBA (сохранить в книге с поддержкой макросов)

 Option Explicit Sub DownloadXML() On Error GoTo ErrHandle Dim wb As Workbook Dim xmlDoc As Object Dim xmlfile As String, csvfile As String xmlfile = ActiveWorkbook.Path & "\file.xml" csvfile = ActiveWorkbook.Path & "\file.csv" Call DownloadFile("https://www.ishares.com/us/258100/fund-download.dl", xmlfile) Set wb = Excel.Workbooks.OpenXML(xmlfile) wb.SaveAs csvfile, 6 wb.Close True ExitHandle: Set wb = Nothing Set xmlDoc = Nothing Exit Sub ErrHandle: MsgBox Err.Number & " - " & Err.Description, vbCritical Resume ExitHandle End Sub Function DownloadFile(url As String, filePath As String) Dim WinHttpReq As Object, oStream As Object Set WinHttpReq = CreateObject("Microsoft.XMLHTTP") WinHttpReq.Open "GET", url, False WinHttpReq.send If WinHttpReq.Status = 200 Then Set oStream = CreateObject("ADODB.Stream") oStream.Open oStream.Type = 1 oStream.Write WinHttpReq.responseBody oStream.SaveToFile filePath, 2 ' 1 = no overwrite, 2 = overwrite oStream.Close End If Set WinHttpReq = Nothing Set oStream = Nothing End Function 

питон

 import pandas as pd csvfile = "/path/to/file.csv" # IMPORT CSV INTO PANDAS DATAFRAME df = pd.read_csv(csvfile, skiprows=8) print(df.describe()) # Weight (%) Price Coupon (%) YTM (%) Yield to Worst (%) Duration # count 625.000000 625.000000 625.000000 625.000000 625.000000 625.000000 # mean 0.159888 101.298768 6.500256 5.881168 5.313760 2.128688 # std 0.126833 10.469460 1.932744 4.059226 4.224268 1.283360 # min -0.110000 0.000000 0.000000 0.000000 -8.030000 0.000000 # 25% 0.090000 100.380000 5.130000 3.430000 3.070000 0.970000 # 50% 0.130000 102.940000 6.380000 4.930000 3.910000 2.240000 # 75% 0.190000 105.000000 7.630000 6.820000 6.070000 3.260000 # max 1.750000 128.750000 12.500000 40.900000 40.900000 5.060000 

Я смог обойти веб-соскоб, обнаружив, что сайт, с которым я работал, разработал api. Затем, используя модуль requests python.

 url = "https://www.blackrock.com/tools/hackathon/performance for ticker in tickers: params = {'identifiers': ticker , 'returnsType':'MONTHLY'} request = requests.get(url, params=params) json = request.json() 
  • Легко использовать данные Excel в SQL Server
  • Как получить список значений с помощью SQL для подключения к XML API?
  • преобразование .xlsx в xml в Perl
  • EXCEL VBA, PARSING & REQUEST UPDATEDATA
  • Экспорт Excel для проверки XML со значением по умолчанию
  • Преобразование excel в xml в php
  • Установите системный буфер обмена с несколькими форматами в Java
  • C # Преобразование объекта Excel.Workbook в файл XML
  • Хороший пример перехода xsl в excel
  • Предотвратите "& # 09;" от перехода на "& amp; # 09;"
  • Загрузите XML в Excel через VBA
  • Interesting Posts

    Отправка электронной почты в Excel с помощью VBA, без Outlook, 64 бит

    Как ссылаться на ActiveX ComboBox в Excel 2016 VBA

    Как скопировать данные из закрытой книги в основную книгу

    Как использовать изменение цвета или DropDown Изменение в формуле – EXCEL

    Как и где я могу изменить GUID для VSTO-Excel-Ribbon?

    Почему Excel вызывает UDF больше, чем требуется?

    Ошибки OutOfMemory с использованием больших данных с ClosedXML

    Изменить значения в строке на основе значения столбца и заменить указанный диапазон столбцов

    Регулярное выражение для соответствия году?

    Отфильтровать данные по сегодняшней дате и после

    Как скопировать значение в диапазоне ячеек в другую ячейку, если только одна ячейка в диапазоне имеет значение?

    Показывать следующий номер счета-фактуры

    Excel VBA 2016 Перемещение ячеек диапазона на другой лист в расчете

    Командная кнопка Excel 2010 больше не активирует событие _Click ()

    Сохранение формул при заполнении данных в массив и переносе между двумя объектами списка Excel-VBA

    Давайте будем гением компьютера.