[Python-checkins] bpo-23706: Add newline parameter to pathlib.Path.write_text (GH-22420) (GH-22420)
miss-islington
webhook-mailer at python.org
Tue Oct 20 22:08:27 EDT 2020
https://github.com/python/cpython/commit/5f227413400c4dfdba210cc0f8c9305421638bc1
commit: 5f227413400c4dfdba210cc0f8c9305421638bc1
branch: master
author: Максим <maksvenberv at yandex.ru>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2020-10-20T19:08:19-07:00
summary:
bpo-23706: Add newline parameter to pathlib.Path.write_text (GH-22420) (GH-22420)
* Add _newline_ parameter to `pathlib.Path.write_text()`
* Update documentation of `pathlib.Path.write_text()`
* Add test case for `pathlib.Path.write_text()` calls with _newline_ parameter passed
Automerge-Triggered-By: GH:methane
files:
A Misc/NEWS.d/next/Library/2020-09-30-11-05-11.bpo-23706.dHTGjF.rst
M Doc/library/pathlib.rst
M Lib/pathlib.py
M Lib/test/test_pathlib.py
diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst
index 9526a03b05398..9de72bb725c75 100644
--- a/Doc/library/pathlib.rst
+++ b/Doc/library/pathlib.rst
@@ -1166,7 +1166,7 @@ call fails (for example because the path doesn't exist).
.. versionadded:: 3.5
-.. method:: Path.write_text(data, encoding=None, errors=None)
+.. method:: Path.write_text(data, encoding=None, errors=None, newline=None)
Open the file pointed to in text mode, write *data* to it, and close the
file::
@@ -1182,6 +1182,9 @@ call fails (for example because the path doesn't exist).
.. versionadded:: 3.5
+ .. versionchanged:: 3.10
+ The *newline* parameter was added.
+
Correspondence to tools in the :mod:`os` module
-----------------------------------------------
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 147be2ff0dddf..178c5b981d8e5 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -1264,14 +1264,14 @@ def write_bytes(self, data):
with self.open(mode='wb') as f:
return f.write(view)
- def write_text(self, data, encoding=None, errors=None):
+ def write_text(self, data, encoding=None, errors=None, newline=None):
"""
Open the file in text mode, write to it, and close the file.
"""
if not isinstance(data, str):
raise TypeError('data must be str, not %s' %
data.__class__.__name__)
- with self.open(mode='w', encoding=encoding, errors=errors) as f:
+ with self.open(mode='w', encoding=encoding, errors=errors, newline=newline) as f:
return f.write(data)
def readlink(self):
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index 2cb6738a295b6..17292dc1abf73 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1510,6 +1510,26 @@ 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_write_text_with_newlines(self):
+ p = self.cls(BASE)
+ # Check that `\n` character change nothing
+ (p / 'fileA').write_text('abcde\r\nfghlk\n\rmnopq', newline='\n')
+ self.assertEqual((p / 'fileA').read_bytes(),
+ b'abcde\r\nfghlk\n\rmnopq')
+ # Check that `\r` character replaces `\n`
+ (p / 'fileA').write_text('abcde\r\nfghlk\n\rmnopq', newline='\r')
+ self.assertEqual((p / 'fileA').read_bytes(),
+ b'abcde\r\rfghlk\r\rmnopq')
+ # Check that `\r\n` character replaces `\n`
+ (p / 'fileA').write_text('abcde\r\nfghlk\n\rmnopq', newline='\r\n')
+ self.assertEqual((p / 'fileA').read_bytes(),
+ b'abcde\r\r\nfghlk\r\n\rmnopq')
+ # Check that no argument passed will change `\n` to `os.linesep`
+ os_linesep_byte = bytes(os.linesep, encoding='ascii')
+ (p / 'fileA').write_text('abcde\nfghlk\n\rmnopq')
+ self.assertEqual((p / 'fileA').read_bytes(),
+ b'abcde' + os_linesep_byte + b'fghlk' + os_linesep_byte + b'\rmnopq')
+
def test_iterdir(self):
P = self.cls
p = P(BASE)
diff --git a/Misc/NEWS.d/next/Library/2020-09-30-11-05-11.bpo-23706.dHTGjF.rst b/Misc/NEWS.d/next/Library/2020-09-30-11-05-11.bpo-23706.dHTGjF.rst
new file mode 100644
index 0000000000000..b9a69a55e6a8d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-09-30-11-05-11.bpo-23706.dHTGjF.rst
@@ -0,0 +1 @@
+Added *newline* parameter to ``pathlib.Path.write_text()``.
More information about the Python-checkins
mailing list