summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSkip Montanaro <skip@pobox.com>2005-12-28 15:37:25 (GMT)
committerSkip Montanaro <skip@pobox.com>2005-12-28 15:37:25 (GMT)
commit91bb70c5c07c2e73535638df2baadb302d9d71d2 (patch)
tree1e9d4be34eb15ca7a78232ddc7065da820be12ff
parente08fa29d0e5bf02006ae30d79c31a6fd02d62068 (diff)
downloadcpython-91bb70c5c07c2e73535638df2baadb302d9d71d2.zip
cpython-91bb70c5c07c2e73535638df2baadb302d9d71d2.tar.gz
cpython-91bb70c5c07c2e73535638df2baadb302d9d71d2.tar.bz2
Fix for problem with Sniffer class. If your delimiter is whitespace and the
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.
-rw-r--r--Lib/csv.py2
-rw-r--r--Lib/test/test_csv.py5
2 files changed, 5 insertions, 2 deletions
diff --git a/Lib/csv.py b/Lib/csv.py
index 14b4d17..7516380 100644
--- a/Lib/csv.py
+++ b/Lib/csv.py
@@ -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
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
index f1f183f..0ad77ef 100644
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -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 ***"