You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
io.StrinIO.getvalue() correctly decodes bytes from the underlying
buffer, but does not translate \r\n to \n.
Python 3.0x (py3k, Aug 26 2007, 14:39:16) [MSC v.1400 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import io
>>> a = io.StringIO()
>>> a.write('\n')
2
>>> a.getvalue()
'\r\n'
As far as I know, StringIO should not do any string transformations.
From PEP-3116 "New I/O", last paragraph of the section "Text I/O":
Another implementation, StringIO, creates a file-like TextIO
implementation without an underlying Buffered I/O object. [...] It
does not support encodings or newline translations; you always read
back exactly the characters you wrote.
As far as I know, StringIO should not do any string transformations.
(Not sure if you agree with the patch or not)
That's why the current behaviour is not correct: When I write('\n'),
getvalue() currently returns '\r\n'.
That's why the current behaviour is not correct: When I write('\n'),
getvalue() currently returns '\r\n'.
Oh, I missed your example in your initial message. So yes, I agree that
StringIO shouldn't translate newlines like that. I attached a patch that
should fix the bug.
However, I would favor removing the "newline" keyword argument, instead.
Here is a new version of the class, which removes the 'newline' argument
from the constructor.
I also removed the 'encoding' argument, since this is really an
implementation detail of the underlying buffer.
I'ev fixed this slightly differently, by simply changing the *default*
of the newline argument to StringIO to be "\n". This is a good default;
but I see no reason to prevent users from messing with it if they have a
need.
Activity
amauryfa commentedon Aug 26, 2007
io.StrinIO.getvalue() correctly decodes bytes from the underlying
buffer, but does not translate \r\n to \n.
The attached patch corrects this and adds a test.
avassalotti commentedon Aug 26, 2007
As far as I know, StringIO should not do any string transformations.
From PEP-3116 "New I/O", last paragraph of the section "Text I/O":
amauryfa commentedon Aug 26, 2007
(Not sure if you agree with the patch or not)
That's why the current behaviour is not correct: When I write('\n'),
getvalue() currently returns '\r\n'.
avassalotti commentedon Aug 27, 2007
Oh, I missed your example in your initial message. So yes, I agree that
StringIO shouldn't translate newlines like that. I attached a patch that
should fix the bug.
However, I would favor removing the "newline" keyword argument, instead.
amauryfa commentedon Aug 28, 2007
Here is a new version of the class, which removes the 'newline' argument
from the constructor.
I also removed the 'encoding' argument, since this is really an
implementation detail of the underlying buffer.
Index: Lib/io.py
===================================================================
--- Lib/io.py (revision 57564)
+++ Lib/io.py (working copy)
@@ -1390,10 +1390,10 @@
gvanrossum commentedon Aug 29, 2007
I'ev fixed this slightly differently, by simply changing the *default*
of the newline argument to StringIO to be "\n". This is a good default;
but I see no reason to prevent users from messing with it if they have a
need.