Controlling the passing of data
Sayth Renshaw
flebber.crue at gmail.com
Thu Apr 28 21:49:14 EDT 2016
On Friday, 29 April 2016 01:19:28 UTC+10, Dan Strohl wrote:
> If I am reading this correctly... you have something like (you will have to excuse my lack of knowledge about what kinds of information these actually are):
>
> <race id=1>
> <nomination>1234</nomination>
> <meeting>first</meeting>
> </race>
> <race id=2>
> <nomination>5678</nomination>
> <meeting>second</meeting>
> </race>
>
>
> And you want something like:
> nominations = [(1,1234), (2,5678)]
> meetings = [(1,'first'),(2,'second')]
>
> if that is correct, my suggestion is to do something like (this is psudeo code, I didn't look up the exact calls to use):
>
> nomination_list = []
> meeting_list = []
>
> for race_element in xml_file('race'):
> id = race_element.get_attr('id')
> for nomination_element in race_element('nomination'):
> nomination = nomination_element.get_text()
> nomination_list.append((id, nomination))
>
> for meeting_element in race_element('meeting'):
> meeting = meeting_element.get_text()
> meeting_list.append((id, meeting))
>
>
>
>
Yes in essence that is what I am trying to acheive however the XML I have has many attributes like this.
for example this is one nomination.
<nomination number="1" saddlecloth="1" horse="Astern" id="198247" idnumber="" regnumber="" blinkers="0" trainernumber="235" trainersurname="O'Shea" trainerfirstname="John" trainertrack="Agnes Banks/Hawkesbury" rsbtrainername="John O'Shea" jockeynumber="86876" jockeysurname="McDonald" jockeyfirstname="James" barrier="10" weight="56.5" rating="0" description="B C 2 Medaglia D'oro(USA) x Essaouira (Exceed And Excel)" colours="Royal Blue" owners="Godolphin" dob="2013-09-24T00:00:00" age="3" sex="C" career="3-2-0-0 $220750.00" thistrack="1-1-0-0 $68750.00" thisdistance="1-1-0-0 $152000.00" goodtrack="3-2-0-0 $220750.00" heavytrack="0-0-0-0" slowtrack="" deadtrack="" fasttrack="0-0-0-0" firstup="2-2-0-0 $220750.00" secondup="1-0-0-0" mindistancewin="0" maxdistancewin="0" finished="1" weightvariation="0" variedweight="56.5" decimalmargin="0.00" penalty="0" pricestarting="$2.15F" sectional200="0" sectional400="0" sectional600="0" sectional800="0" sectional1200="0" bonusindicator="" />
Therefore I thought that if I tried to do it like the code you posted it would soon become unweildy.
> for race_element in xml_file('race'):
> id = race_element.get_attr('id')
> for nomination_element in race_element('nomination'):
> nomination = nomination_element.get_text()
> nomination_list.append((id, nomination))
So I created a list of the attributes of each class meeting race nomination and then parsed that list through the list comprehension.
On putting out the code though I realised that whilst each class worked I had no way to relate the race to the meeting, the nomination to the race so if I then loaded the csv or created sql to push it to a db it would loose its relation.
So when I say
meetattrs = ('id', 'venue', 'date', 'rail', 'weather', 'trackcondition')
In my thinking this is a table.
Meeting
id
venue
date
rail
weather
trackcondition
There is no foreign key relation to race, so in this question I am saying shouldn't I put the meeting_id as a foreign key into the race attributes before parsing race and then I can have a 'id' in meeting related to the new 'race_id' in race. The id of race would then be put in nomnation before parsing and I would do the same?
Hoping this is clearer, probably a little close to the problem to express it clearly so I apologise for that.
Sayth
More information about the Python-list
mailing list