Skip to content

Commit e719793

Browse files
[2.7] bpo-30157: Fix csv.Sniffer.sniff() regex pattern. (GH-5601) (GH-5604)
Co-authored-by: Jake Davis <jcdavis@awedge.net>. (cherry picked from commit 2411292)
1 parent 672fd7d commit e719793

4 files changed

Lines changed: 13 additions & 1 deletion

File tree

Lib/csv.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ def _guess_quote_and_delimiter(self, data, delimiters):
217217
matches = []
218218
for restr in ('(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)', # ,".*?",
219219
'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)', # ".*?",
220-
'(?P<delim>>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)', # ,".*?"
220+
'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)', # ,".*?"
221221
'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n)'): # ".*?" (no delim, no space)
222222
regexp = re.compile(restr, re.DOTALL | re.MULTILINE)
223223
matches = regexp.findall(data)

Lib/test/test_csv.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,6 +1036,15 @@ def test_has_header_regex_special_delimiter(self):
10361036
self.assertEqual(sniffer.has_header(self.header2 + self.sample8),
10371037
True)
10381038

1039+
def test_guess_quote_and_delimiter(self):
1040+
sniffer = csv.Sniffer()
1041+
for header in (";'123;4';", "'123;4';", ";'123;4'", "'123;4'"):
1042+
dialect = sniffer.sniff(header, ",;")
1043+
self.assertEqual(dialect.delimiter, ';')
1044+
self.assertEqual(dialect.quotechar, "'")
1045+
self.assertIs(dialect.doublequote, False)
1046+
self.assertIs(dialect.skipinitialspace, False)
1047+
10391048
def test_sniff(self):
10401049
sniffer = csv.Sniffer()
10411050
dialect = sniffer.sniff(self.sample1)

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ Kushal Das
317317
Jonathan Dasteel
318318
Pierre-Yves David
319319
A. Jesse Jiryu Davis
320+
Jake Davis
320321
Merlijn van Deen
321322
John DeGood
322323
Ned Deily
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fixed guessing quote and delimiter in csv.Sniffer.sniff() when only the last
2+
field is quoted. Patch by Jake Davis.

0 commit comments

Comments
 (0)