mirror of
https://github.com/python/cpython.git
synced 2025-09-27 10:50:04 +00:00
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
This commit is contained in:
parent
25492a5b59
commit
5f22741340
4 changed files with 27 additions and 3 deletions
|
@ -1166,7 +1166,7 @@ call fails (for example because the path doesn't exist).
|
||||||
.. versionadded:: 3.5
|
.. 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
|
Open the file pointed to in text mode, write *data* to it, and close the
|
||||||
file::
|
file::
|
||||||
|
@ -1182,6 +1182,9 @@ call fails (for example because the path doesn't exist).
|
||||||
|
|
||||||
.. versionadded:: 3.5
|
.. versionadded:: 3.5
|
||||||
|
|
||||||
|
.. versionchanged:: 3.10
|
||||||
|
The *newline* parameter was added.
|
||||||
|
|
||||||
Correspondence to tools in the :mod:`os` module
|
Correspondence to tools in the :mod:`os` module
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
|
|
|
@ -1264,14 +1264,14 @@ class Path(PurePath):
|
||||||
with self.open(mode='wb') as f:
|
with self.open(mode='wb') as f:
|
||||||
return f.write(view)
|
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.
|
Open the file in text mode, write to it, and close the file.
|
||||||
"""
|
"""
|
||||||
if not isinstance(data, str):
|
if not isinstance(data, str):
|
||||||
raise TypeError('data must be str, not %s' %
|
raise TypeError('data must be str, not %s' %
|
||||||
data.__class__.__name__)
|
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)
|
return f.write(data)
|
||||||
|
|
||||||
def readlink(self):
|
def readlink(self):
|
||||||
|
|
|
@ -1510,6 +1510,26 @@ class _BasePathTest(object):
|
||||||
self.assertRaises(TypeError, (p / 'fileA').write_text, b'somebytes')
|
self.assertRaises(TypeError, (p / 'fileA').write_text, b'somebytes')
|
||||||
self.assertEqual((p / 'fileA').read_text(encoding='latin-1'), 'äbcdefg')
|
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):
|
def test_iterdir(self):
|
||||||
P = self.cls
|
P = self.cls
|
||||||
p = P(BASE)
|
p = P(BASE)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Added *newline* parameter to ``pathlib.Path.write_text()``.
|
Loading…
Add table
Add a link
Reference in a new issue