mirror of https://github.com/python/cpython
Issue #13573: The csv.writer now uses the repr() for floats rather than str().
This commit is contained in:
parent
8b59c23a54
commit
f537702732
|
@ -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:
|
||||
|
|
|
@ -85,6 +85,9 @@ Library
|
|||
- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
|
||||
other than 900k.
|
||||
|
||||
- Issue #13573: The csv.writer now uses the repr() for floats rather than str().
|
||||
This allows floats to round-trip without loss of precision.
|
||||
|
||||
- Issue #13439: Fix many errors in turtle docstrings.
|
||||
|
||||
- Issue #12856: Ensure child processes do not inherit the parent's random
|
||||
|
|
|
@ -1184,7 +1184,11 @@ csv_writerow(WriterObj *self, PyObject *seq)
|
|||
else {
|
||||
PyObject *str;
|
||||
|
||||
if (PyFloat_Check(field)) {
|
||||
str = PyObject_Repr(field);
|
||||
} else {
|
||||
str = PyObject_Str(field);
|
||||
}
|
||||
Py_DECREF(field);
|
||||
if (str == NULL)
|
||||
return NULL;
|
||||
|
|
Loading…
Reference in New Issue