Issue #13573: The csv.writer now uses the repr() for floats rather than str().

This commit is contained in:
Raymond Hettinger 2011-12-11 22:31:09 -08:00
parent 8b59c23a54
commit f537702732
3 changed files with 22 additions and 3 deletions

View file

@ -207,6 +207,18 @@ class Test_Csv(unittest.TestCase):
fileobj.close()
os.unlink(name)
def test_write_float(self):
# Issue 13573: loss of precision because csv.writer
# uses str() for floats instead of repr()
orig_row = [1.234567890123, 1.0/7.0, 'abc']
f = StringIO()
c = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC)
c.writerow(orig_row)
f.seek(0)
c = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC)
new_row = next(c)
self.assertEqual(orig_row, new_row)
def _read_test(self, input, expect, **kwargs):
reader = csv.reader(input, **kwargs)
result = list(reader)
@ -784,7 +796,7 @@ class TestArrayWrites(unittest.TestCase):
try:
writer = csv.writer(fileobj, dialect="excel")
writer.writerow(a)
expected = ",".join([str(i) for i in a])+"\r\n"
expected = ",".join([repr(i) for i in a])+"\r\n"
fileobj.seek(0)
self.assertEqual(fileobj.read(), expected)
finally:
@ -800,7 +812,7 @@ class TestArrayWrites(unittest.TestCase):
try:
writer = csv.writer(fileobj, dialect="excel")
writer.writerow(a)
expected = ",".join([str(i) for i in a])+"\r\n"
expected = ",".join([repr(i) for i in a])+"\r\n"
fileobj.seek(0)
self.assertEqual(fileobj.read(), expected)
finally: