msg273486 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-23 16:42 |
It's sometimes annoying that a csv.DictReader doesn't retain the field ordering given in the first line of the file. Sometimes it matters. This patch converts the reader so that it returns an OrderedDict rather than a plain dict, thereby retaining the ordering. All tests still pass (though I haven't yet added a test to verify that the field ordering *is* retained - didn't think it was worth it if the patch won't be added, but will happily add that test otherwise). I have updated the documentation, but was unable in the time available to find out how to correctly reference the OrderedDict class so that it was correctly hyperlinked. |
|
|
msg273487 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-23 16:46 |
Sorry, deleted the originally submitted (incorrect) patch file. |
|
|
msg273489 - (view) |
Author: R. David Murray (r.david.murray) *  |
Date: 2016-08-23 16:52 |
I think this seems reasonable, now that OrderedDict is in C. |
|
|
msg273530 - (view) |
Author: Raymond Hettinger (rhettinger) *  |
Date: 2016-08-24 02:12 |
This looks like a nice improvement. The patch needs a test and the docs need a versionchanged entry. |
|
|
msg273540 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-24 08:37 |
Testing could be interesting. I'm thinking of generating five random string keys with a couple of rows of data, creating csv StringIOs (using pure Python) for all 120 combinations and verifying that they read back in the order they were written. We should also test that OrderedDicts write correctly with a DictWriter and the same key sets. It's a fairly haphazard test plan, so I'll be happy to hear more thorough suggestions. We could at a pinch reduce the number of keys to three if speed considerations dictate. BTW, what happened to NEWS.txt? :) |
|
|
msg273694 - (view) |
Author: Raymond Hettinger (rhettinger) *  |
Date: 2016-08-26 04:16 |
Consider using itertools.permutations() to generate the 120 cases cases. The news entry goes into Misc/NEWS (there is not .txt extension). |
|
|
msg273695 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-26 06:05 |
Is there another way? :) Sent from my iPhone > On 26 Aug 2016, at 12:16, Raymond Hettinger <report@bugs.python.org> wrote: > > > Raymond Hettinger added the comment: > > Consider using itertools.permutations() to generate the 120 cases cases. > > The news entry goes into Misc/NEWS (there is not .txt extension). > > ---------- > > _______________________________________ > Python tracker <report@bugs.python.org> > <https://bugs.python.org/issue27842> > _______________________________________ |
|
|
msg273709 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-26 17:30 |
OK, here's what I think should be close to the final patch. I've updated the documentation, rebuilt it and verified it reads OK, and confirmed that the new code passes all tests except those skipped for platform reasons (I think they expect a Windows environment). This includes the new test to confirm that ordering is retained over all 120 possible combinations of five keys. Please let me know if any further updates are needed. |
|
|
msg273956 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2016-08-30 19:35 |
New changeset bb3e2a5be31b by Raymond Hettinger in branch 'default': Issue #27842: The csv.DictReader now returns rows of type OrderedDict. https://hg.python.org/cpython/rev/bb3e2a5be31b |
|
|
msg273957 - (view) |
Author: Raymond Hettinger (rhettinger) *  |
Date: 2016-08-30 19:37 |
Thanks Steve. |
|
|
msg273963 - (view) |
Author: Steve Holden (holdenweb) *  |
Date: 2016-08-30 20:47 |
A pleasure. Pretty heavily committed at present, but all Python related so maybe there'll be more small positive improvements. |
|
|