]> granicus.if.org Git - python/commitdiff
Fix for problem with Sniffer class. If your delimiter is whitespace and the
authorSkip Montanaro <skip@pobox.com>
Wed, 28 Dec 2005 15:37:25 +0000 (15:37 +0000)
committerSkip Montanaro <skip@pobox.com>
Wed, 28 Dec 2005 15:37:25 +0000 (15:37 +0000)
last field was empty it would strip the delimiter and incorrectly guess that
"" was the delimiter.  Reported in c.l.py by Laurent Laporte.  Will
backport.

Lib/csv.py
Lib/test/test_csv.py

index 14b4d17c2342b9b11121d41683f1fb8b4c2230ff..75163800834cba8917f35f673f91ea1a191b2783 100644 (file)
@@ -271,7 +271,7 @@ class Sniffer:
                 for char in ascii:
                     metaFrequency = charFrequency.get(char, {})
                     # must count even if frequency is 0
-                    freq = line.strip().count(char)
+                    freq = line.count(char)
                     # value is the mode
                     metaFrequency[freq] = metaFrequency.get(freq, 0) + 1
                     charFrequency[char] = metaFrequency
index f1f183f3fb110fc41f705c56a01bc4bca87d4cab..0ad77ef09c6ef0217632da7f644d31cde072473f 100644 (file)
@@ -836,7 +836,6 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
 'Tommy''s Place':'Blue Island':'IL':'12/28/02':'Blue Sunday/White Crow'
 'Stonecutters Seafood and Chop House':'Lemont':'IL':'12/19/02':'Week Back'
 """
-
     header = '''\
 "venue","city","state","date","performers"
 '''
@@ -852,6 +851,8 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
 47483648;43.0;170;abc;def
 '''
 
+    sample5 = "aaa\tbbb\r\nAAA\t\r\nBBB\t\r\n"
+
     def test_has_header(self):
         sniffer = csv.Sniffer()
         self.assertEqual(sniffer.has_header(self.sample1), False)
@@ -879,6 +880,8 @@ Stonecutters Seafood and Chop House, Lemont, IL, 12/19/02, Week Back
         self.assertEqual(dialect.delimiter, "/")
         dialect = sniffer.sniff(self.sample4)
         self.assertEqual(dialect.delimiter, ";")
+        dialect = sniffer.sniff(self.sample5)
+        self.assertEqual(dialect.delimiter, "\t")
 
 if not hasattr(sys, "gettotalrefcount"):
     if test_support.verbose: print "*** skipping leakage tests ***"