80_csv.py 919 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import csv
  2. def test(data: str, expected):
  3. ret = list(csv.reader(data.splitlines()))
  4. assert ret==expected, f"Expected {expected}, got {ret}"
  5. test("""a,b,c
  6. 1,2,3
  7. """, [['a', 'b', 'c'], ['1', '2', '3']])
  8. test("""a,b,c
  9. 1,2,"3"
  10. """, [['a', 'b', 'c'], ['1', '2', '3']])
  11. test("""a,b,c
  12. 1,2,"3,,"
  13. """, [['a', 'b', 'c'], ['1', '2', '3,,']])
  14. test("""a,b,c
  15. 1,2,'3'
  16. """, [['a', 'b', 'c'], ['1', '2', '\'3\'']])
  17. test('''a,b,c
  18. 1,2,"123"""
  19. ''', [['a', 'b', 'c'], ['1', '2', '123"']])
  20. test("""a,b,c,
  21. 1,2,3,
  22. """, [['a', 'b', 'c', ''], ['1', '2', '3', '']])
  23. test("""a,b ,c,
  24. 1,"22""33",3
  25. """, [['a', 'b ', 'c', ''], ['1', '22"33', '3']])
  26. # newline
  27. test('''a,b,c
  28. 1,2,"3,
  29. 4"
  30. 5,"a,""
  31. b",7
  32. ''', [['a', 'b', 'c'], ['1', '2', '3,\n 4'], ['5', 'a,"\nb', '7']])
  33. ret = csv.DictReader("""a,b,c
  34. 1,2,3
  35. "4",5,6
  36. """.splitlines())
  37. assert list(ret)==[
  38. {'a': '1', 'b': '2', 'c': '3'},
  39. {'a': '4', 'b': '5', 'c': '6'},
  40. ]