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