bpo-30157: Fix csv.Sniffer.sniff() regex pattern. (GH-5601)
Co-authored-by: Jake Davis <jcdavis@awedge.net>
This commit is contained in:
parent
bfe4fd5f2e
commit
2411292ba8
|
@ -217,7 +217,7 @@ class Sniffer:
|
|||
matches = []
|
||||
for restr in (r'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?P=delim)', # ,".*?",
|
||||
r'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?P<delim>[^\w\n"\'])(?P<space> ?)', # ".*?",
|
||||
r'(?P<delim>>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)', # ,".*?"
|
||||
r'(?P<delim>[^\w\n"\'])(?P<space> ?)(?P<quote>["\']).*?(?P=quote)(?:$|\n)', # ,".*?"
|
||||
r'(?:^|\n)(?P<quote>["\']).*?(?P=quote)(?:$|\n)'): # ".*?" (no delim, no space)
|
||||
regexp = re.compile(restr, re.DOTALL | re.MULTILINE)
|
||||
matches = regexp.findall(data)
|
||||
|
|
|
@ -986,6 +986,16 @@ Stonecutters Seafood and Chop House+ Lemont+ IL+ 12/19/02+ Week Back
|
|||
self.assertEqual(sniffer.has_header(self.header2 + self.sample8),
|
||||
True)
|
||||
|
||||
def test_guess_quote_and_delimiter(self):
|
||||
sniffer = csv.Sniffer()
|
||||
for header in (";'123;4';", "'123;4';", ";'123;4'", "'123;4'"):
|
||||
with self.subTest(header):
|
||||
dialect = sniffer.sniff(header, ",;")
|
||||
self.assertEqual(dialect.delimiter, ';')
|
||||
self.assertEqual(dialect.quotechar, "'")
|
||||
self.assertIs(dialect.doublequote, False)
|
||||
self.assertIs(dialect.skipinitialspace, False)
|
||||
|
||||
def test_sniff(self):
|
||||
sniffer = csv.Sniffer()
|
||||
dialect = sniffer.sniff(self.sample1)
|
||||
|
|
|
@ -355,6 +355,7 @@ Kushal Das
|
|||
Jonathan Dasteel
|
||||
Pierre-Yves David
|
||||
A. Jesse Jiryu Davis
|
||||
Jake Davis
|
||||
Ratnadeep Debnath
|
||||
Merlijn van Deen
|
||||
John DeGood
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fixed guessing quote and delimiter in csv.Sniffer.sniff() when only the last
|
||||
field is quoted. Patch by Jake Davis.
|
Loading…
Reference in New Issue