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 <barney.gale@gmail.com>
This commit is contained in:
Junya Okabe 2023-11-22 07:32:38 +09:00 committed by GitHub
parent d857d5331a
commit 9d70831cb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 3 deletions

View File

@ -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()

View File

@ -950,12 +950,12 @@ class _PathBase(PurePath):
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):

View File

@ -1878,6 +1878,21 @@ class DummyPathTest(unittest.TestCase):
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

View File

@ -0,0 +1,2 @@
Added *newline* parameter to :meth:`pathlib.Path.read_text`.
Patch by Junya Okabe.