Skip to content

Commit

Permalink
gh-110745: add a newline argument to pathlib.Path.read_text (#110880)
Browse files Browse the repository at this point in the history
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Barney Gale <barney.gale@gmail.com>
  • Loading branch information
3 people committed Nov 21, 2023
1 parent d857d53 commit 9d70831
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 3 deletions.
4 changes: 3 additions & 1 deletion Doc/library/pathlib.rst
Expand Up @@ -1314,7 +1314,7 @@ call fails (for example because the path doesn't exist).
.. versionadded:: 3.5


.. method:: Path.read_text(encoding=None, errors=None)
.. method:: Path.read_text(encoding=None, errors=None, newline=None)

Return the decoded contents of the pointed-to file as a string::

Expand All @@ -1329,6 +1329,8 @@ call fails (for example because the path doesn't exist).

.. versionadded:: 3.5

.. versionchanged:: 3.13
The *newline* parameter was added.

.. method:: Path.readlink()

Expand Down
4 changes: 2 additions & 2 deletions Lib/pathlib.py
Expand Up @@ -950,12 +950,12 @@ def read_bytes(self):
with self.open(mode='rb') as f:
return f.read()

def read_text(self, encoding=None, errors=None):
def read_text(self, encoding=None, errors=None, newline=None):
"""
Open the file in text mode, read it, and close the file.
"""
encoding = io.text_encoding(encoding)
with self.open(mode='r', encoding=encoding, errors=errors) as f:
with self.open(mode='r', encoding=encoding, errors=errors, newline=newline) as f:
return f.read()

def write_bytes(self, data):
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_pathlib.py
Expand Up @@ -1878,6 +1878,21 @@ def test_read_write_text(self):
self.assertRaises(TypeError, (p / 'fileA').write_text, b'somebytes')
self.assertEqual((p / 'fileA').read_text(encoding='latin-1'), 'äbcdefg')

def test_read_text_with_newlines(self):
p = self.cls(BASE)
# Check that `\n` character change nothing
(p / 'fileA').write_bytes(b'abcde\r\nfghlk\n\rmnopq')
self.assertEqual((p / 'fileA').read_text(newline='\n'),
'abcde\r\nfghlk\n\rmnopq')
# Check that `\r` character replaces `\n`
(p / 'fileA').write_bytes(b'abcde\r\nfghlk\n\rmnopq')
self.assertEqual((p / 'fileA').read_text(newline='\r'),
'abcde\r\nfghlk\n\rmnopq')
# Check that `\r\n` character replaces `\n`
(p / 'fileA').write_bytes(b'abcde\r\nfghlk\n\rmnopq')
self.assertEqual((p / 'fileA').read_text(newline='\r\n'),
'abcde\r\nfghlk\n\rmnopq')

def test_write_text_with_newlines(self):
p = self.cls(BASE)
# Check that `\n` character change nothing
Expand Down
@@ -0,0 +1,2 @@
Added *newline* parameter to :meth:`pathlib.Path.read_text`.
Patch by Junya Okabe.

0 comments on commit 9d70831

Please sign in to comment.