From 9d70831cb7127855a8bf83b585525f13cffb9f59 Mon Sep 17 00:00:00 2001 From: Junya Okabe <86868255+Okabe-Junya@users.noreply.github.com> Date: Wed, 22 Nov 2023 07:32:38 +0900 Subject: [PATCH] gh-110745: add a newline argument to pathlib.Path.read_text (#110880) Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com> Co-authored-by: Barney Gale --- Doc/library/pathlib.rst | 4 +++- Lib/pathlib.py | 4 ++-- Lib/test/test_pathlib.py | 15 +++++++++++++++ ...2023-10-15-08-08-26.gh-issue-110745.mxEkh0.rst | 2 ++ 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-10-15-08-08-26.gh-issue-110745.mxEkh0.rst diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst index 8ee89a003a339a..7ecfd120db8d15 100644 --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -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:: @@ -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() diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 73f87b9acbf9d5..9bce5320ef68e9 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -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): diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 7083e9ebba6690..e1121a9d76c040 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -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 diff --git a/Misc/NEWS.d/next/Library/2023-10-15-08-08-26.gh-issue-110745.mxEkh0.rst b/Misc/NEWS.d/next/Library/2023-10-15-08-08-26.gh-issue-110745.mxEkh0.rst new file mode 100644 index 00000000000000..b99f968dc20ae9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-10-15-08-08-26.gh-issue-110745.mxEkh0.rst @@ -0,0 +1,2 @@ +Added *newline* parameter to :meth:`pathlib.Path.read_text`. +Patch by Junya Okabe.