reader = csv.DictReader(f, fieldnames)
self.assertEqual(reader.fieldnames, fieldnames)
+ def test_dict_reader_set_fieldnames(self):
+ fieldnames = ["a", "b", "c"]
+ f = StringIO()
+ reader = csv.DictReader(f)
+ self.assertIsNone(reader.fieldnames)
+ reader.fieldnames = fieldnames
+ self.assertEqual(reader.fieldnames, fieldnames)
+
def test_dict_writer_fieldnames_rejects_iter(self):
fieldnames = ["a", "b", "c"]
f = StringIO()
def test_dict_reader_fieldnames_is_optional(self):
f = StringIO()
reader = csv.DictReader(f, fieldnames=None)
+ self.assertIsNone(reader.fieldnames)
def test_read_dict_fields(self):
with TemporaryFile("w+", encoding="utf-8") as fileobj:
ghi\0jkl
"""
+ sample15 = "\n\n\n"
+ sample16 = "abc\ndef\nghi"
+
+ sample17 = ["letter,offset"]
+ sample17.extend(f"{chr(ord('a') + i)},{i}" for i in range(20))
+ sample17.append("v,twenty_one") # 'u' was skipped
+ sample17 = '\n'.join(sample17)
+
+ sample18 = ["letter,offset"]
+ sample18.extend(f"{chr(ord('a') + i)},{i}" for i in range(21))
+ sample18.append("v,twenty_one") # 'u' was not skipped
+ sample18 = '\n'.join(sample18)
+
def test_issue43625(self):
sniffer = csv.Sniffer()
self.assertTrue(sniffer.has_header(self.sample12))
self.assertIs(sniffer.has_header(self.sample8), False)
self.assertIs(sniffer.has_header(self.header2 + self.sample8), True)
+ def test_has_header_checks_20_rows(self):
+ sniffer = csv.Sniffer()
+ self.assertFalse(sniffer.has_header(self.sample17))
+ self.assertTrue(sniffer.has_header(self.sample18))
+
def test_guess_quote_and_delimiter(self):
sniffer = csv.Sniffer()
for header in (";'123;4';", "'123;4';", ";'123;4'", "'123;4'"):
self.assertEqual(dialect.quotechar, "'")
dialect = sniffer.sniff(self.sample14)
self.assertEqual(dialect.delimiter, '\0')
+ self.assertRaisesRegex(csv.Error, "Could not determine delimiter",
+ sniffer.sniff, self.sample15)
+ self.assertRaisesRegex(csv.Error, "Could not determine delimiter",
+ sniffer.sniff, self.sample16)
def test_doublequote(self):
sniffer = csv.Sniffer()