diff --git a/Lib/csv.py b/Lib/csv.py index 0a627ba7a512fa8..c593e635aa5ca1e 100644 --- a/Lib/csv.py +++ b/Lib/csv.py @@ -282,6 +282,9 @@ def _guess_quote_and_delimiter(self, data, delimiters): """ import re + # Remove lists from the data, see issue 119123 + data = re.sub(r'\[.*?\]', '', data) + matches = [] for restr in (r'(?P[^\w\n"\'])(?P ?)(?P["\']).*?(?P=quote)(?P=delim)', # ,".*?", r'(?:^|\n)(?P["\']).*?(?P=quote)(?P[^\w\n"\'])(?P ?)', # ".*?", diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 9aace57633b0c64..c6340d8e1b70f3f 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -1331,11 +1331,22 @@ class TestSniffer(unittest.TestCase): ghi\0jkl """ + sample15 = dedent("""\ + id;field1;group;sub_group + 1;False;['345'];['10'] + 2;False;['112', '112'];['765', '766'] + """) + def test_issue43625(self): sniffer = csv.Sniffer() self.assertTrue(sniffer.has_header(self.sample12)) self.assertFalse(sniffer.has_header(self.sample13)) + def test_issue119123(self): + sniffer = csv.Sniffer() + dialect = sniffer.sniff(self.sample15, ",;") + self.assertEqual(dialect.delimiter, ';') + def test_has_header_strings(self): "More to document existing (unexpected?) behavior than anything else." sniffer = csv.Sniffer()