In addition to Peter's points, 
- I would suggest breaking out the list comprehensions into standard for loops 
and/or functions.  That makes it easier to read and troubleshoot.  (you can 
always re-optimize It if needed.)
- Peter's point about making things into functions will also help 
troubleshooting.  You can better test the data going into and out of the 
function.  In my code, I will often have the file access and data processing as 
separate functions, then the main routine just calls the function to get data, 
passes that data to a function that manipulates it, and then pass the results 
to a function that writes it out.  This allows for much easier testing and 
troubleshooting of the individual functions.  (sometimes I will reassemble them 
into one function when I am done, depending on my needs)

More importantly though in terms of your getting help for your problem, the 
post is unclear (to me at least) in terms of what you are trying to achieve and 
what isn't working, 

Try considering the following suggestions:

- It is unclear what the problem is that you are having, you say you are trying 
to do x, and you are having problems in a part after a comment, but none of the 
comments say "this is breaking".  I assume you are talking about the comment 
that starts "Here I need to traverse", but don't know for sure, and even if it 
is, you don't specify what the problem actually is;  are you receiving an 
exception message (please let us know what it is), is it running, but not doing 
anything?  is it returning incorrect data? or???

- When posting, rather than commenting out code that you aren't using right 
now, and code that is working and not related to the problem, I recommend just 
deleting them so that people don't have to try to work through it.... for 
example, just remove the GetArgs function and just say fileList = "/xml_dir", 
and the section at the end that is all commented out, just remove it.  You 
should just have the minimum needed to replicate the problem.  

This will also help in troubleshooting, when I have a problem like this, and I 
can't figure out what is going on, I will copy the code to a new file and make 
a program that will handle a specific set of data, and try to do the one thing 
that is breaking, removing all the rest of the stuff, and test the results.. 
so, for example, copy a sample of the xml with a couple of data items into a 
string var, and have a program that processes that and checks to see if at the 
end you end up with a list of the right values by printing a list rather than 
muddying the waters with file access, and writing out csv's.  (by the way, this 
is a great time to start working with unit testing if you aren't already, it is 
simple to create this as a test case and you will find that if you start doing 
testing along the way, the time it takes to troubleshoot errors along the way 
will go down dramatically.)

- Be clear at the end what you expect to get, especially if it is not what you 
are getting... so, either in the code as a comment, or in a descriptive 
paragraph, have a section that said something like:  "At the end of the 
snippet, meetdata, racedata, clubdata, and raceid should be a list of 
dictionaries with the data from the xml" (or whatever... possibly with an 
example of what you would expect).  This is even more important if the problem 
you are having is that the code is not returning correct data.  This may not be 
as needed if the code is simply blowing up at line xx, though it would still 
help people understand your goal.

- For the example at least (you may choose to do differently in your live 
code), use nice explanatory variable names and don't rename imports, so it 
would be clearer to say "import pandas", then "frames = pandas.DataFrame[])".  
That way the reader doesn't have to keep referring to the imports to figure out 
what is going on.

Remember, you are asking a large number of people for help, most of which are 
pretty busy already, so the more you can do to simplify and show the exact 
problem, the more (and more useful) help you are likely to receive.  To this 
lists credit, even if you are completely unclear in your question, you will 
likely get *something* back, (as you saw with Peters response), but what you 
get back is more likely to be a general suggestion rather than a specific fix 
for your problem.

Dan Strohl




> -----Original Message-----
> From: Python-list [mailto:python-list-bounces+d.strohl=f5....@python.org]
> On Behalf Of Peter Otten
> Sent: Thursday, April 28, 2016 6:40 AM
> To: python-list@python.org
> Subject: Re: Controlling the passing of data
> 
> Sayth Renshaw wrote:
> 
> > In my file here I needed to traverse and modify the XML file I don't
> > want to restore it or put it in a new variable or other format I just
> > want to alter it and let it flow onto the list comprehensions as they were.
> 
> That looks like an arbitrary limitation to me. It's a bit like "I want to 
> repair my
> car with this big hammer".
> 
> > In particular here I am taking the id from race and putting it into
> > the children of each race called nomination.
> >
> > I have put a comment above the new code which is causing the difficulty.
> 
> Your actual problem is drowned in too much source code. Can you restate it
> in English, optionally with a few small snippets of Python?
> 
> It is not even clear what the code you provide should accomplish once it's
> running as desired.
> 
> To give at least one code-related advice: You have a few repetitions of the
> following structure
> 
> > meetattrs = ('id', 'venue', 'date', 'rail', 'weather',
> > 'trackcondition')
> 
> >     meet = d('meeting')
> 
> >     meetdata = [[meet.eq(i).attr(x)
> >                  for x in meetattrs] for i in range(len(meet))]
> 
> You should move the pieces into a function that works for meetings, clubs,
> races, and so on. Finally (If I am repeating myself so be it): the occurence 
> of
> range(len(something)) in your code is a strong indication that you are not
> using Python the way Guido intended it. Iterate over the `something` directly
> whenever possible.
> 
> --
> https://mail.python.org/mailman/listinfo/python-list
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to