-
-
Notifications
You must be signed in to change notification settings - Fork 30.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Order CSV header fields #72029
Comments
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. |
Sorry, deleted the originally submitted (incorrect) patch file. |
I think this seems reasonable, now that OrderedDict is in C. |
This looks like a nice improvement. The patch needs a test and the docs need a versionchanged entry. |
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? :) |
Consider using itertools.permutations() to generate the 120 cases cases. The news entry goes into Misc/NEWS (there is not .txt extension). |
Is there another way? :) Sent from my iPhone
|
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. |
New changeset bb3e2a5be31b by Raymond Hettinger in branch 'default': |
Thanks Steve. |
A pleasure. Pretty heavily committed at present, but all Python related so maybe there'll be more small positive improvements. |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: