简体   繁体   中英

Request XML file from URL and save as CSV using python

I am new in python coding and I would like to get XML file from a server, parse it and save to csv file.

2 parts are ok, I am able to get the file and parse it, but there is an issue with saving as a csv.

The code:

import requests
import numpy as np

hu = requests.get('https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml', stream=True)
from xml.etree import ElementTree as ET
tree = ET.parse(hu.raw)
root = tree.getroot()
namespaces = {'ex': 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref'}
for cube in root.findall('.//ex:Cube[@currency]', namespaces=namespaces):
    np.savetxt('data.csv', (cube.attrib['currency'], cube.attrib['rate']), delimiter=',')   

Error I get is: mismatch between array dtype and format specifier. It probably means I get data and try to save it as array, and there appears a mismatch. But i am not sure how to fix the problem and to not have a mismatch.

Thank you

from the docs , your second argument in np.savetext should be a tuple of equal sized arrays . What you are providing are strings:

>>> x = y = z = np.arange(0.0,5.0,1.0)
>>> np.savetxt('test.out', x, delimiter=',')   # X is an array
>>> np.savetxt('test.out', (x,y,z))   # x,y,z equal sized 1D arrays
>>> np.savetxt('test.out', x, fmt='%1.4e')   # use exponential notation

You'll need to gather all of the concurrency and rate values into arrays, then save as csv:

concurrency, rate = [], []
for cube in root.findall('.//ex:Cube[@currency]', namespaces=namespaces):
    concurrency.append(cube.attrib['concurrency'])
    rate.append(cube.attrib['rate'])

np.savetext('file.csv', (concurrency, rate), delimeter='c')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM