On Thursday, April 28, 2016 at 8:11:26 PM UTC+5:30, Dan Strohl wrote:
> 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-----
> > 
> > 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

To add to that:
It is right to have a dislike for bad code and a desire for good code.
But this desire odes not translate into an effective communication. In 
particular:  I dont think anyone quite gets exactly you are after in:

> 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. 

So please cut down your example to 1/4 the size:
- Tiny inline triple-quoted xml
- Your attempt so far
- What you would like to do different
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to