diff -r 0056aaf42bf7 Lib/pathlib.py --- a/Lib/pathlib.py Wed Jan 15 15:09:43 2014 +0000 +++ b/Lib/pathlib.py Wed Jan 22 22:19:30 2014 -0600 @@ -1069,6 +1069,54 @@ return io.open(str(self), mode, buffering, encoding, errors, newline, opener=self._opener) + def read(self, size=None, mode="r", buffering=-1, encoding=None, + errors=None, newline=None): + """ + Open the file, read it, and close the file. + """ + if "r" not in mode: + raise Exception("Mode for 'Path.read' must contain 'r'.") + with self.open(mode=mode, buffering=buffering, encoding=encoding, + errors=errors, newline=newline) as file: + return file.read(size) + + def readlines(self, mode="r", buffering=-1, encoding=None, + errors=None, newline=None, size=-1): + """ + Open the file, read it, and close the file. Returns output in lines. + """ + if "r" not in mode: + raise Exception("Mode for 'Path.readlines' must contain 'r'.") + with self.open(mode=mode, buffering=buffering, encoding=encoding, + errors=errors, newline=newline) as file: + return file.readlines(size) + + def write(self, data, mode="w", buffering=-1, encoding=None, + errors=None, newline=None): + """ + Open the file, write to it, and close the file. + """ + if not {"w", "a", "x"} & set(mode): + raise Exception( + "Mode for 'Path.write' must contain 'w', 'a' or 'x'." + ) + with self.open(mode=mode, buffering=buffering, encoding=encoding, + errors=errors, newline=newline) as file: + return file.write(data) + + def writelines(self, data, mode="w", buffering=-1, encoding=None, + errors=None, newline=None): + """ + Open the file, write to it, and close the file. Takes input as lines. + """ + if not {"w", "a", "x"} & set(mode): + raise Exception( + "Mode for Path.writelines must contain 'w', 'a' or 'x'." + ) + with self.open(mode=mode, buffering=buffering, encoding=encoding, + errors=errors, newline=newline) as file: + return file.writelines(data) + def touch(self, mode=0o666, exist_ok=True): """ Create this file with the given access mode, if it doesn't exist. diff -r 0056aaf42bf7 Lib/test/test_pathlib.py --- a/Lib/test/test_pathlib.py Wed Jan 15 15:09:43 2014 +0000 +++ b/Lib/test/test_pathlib.py Wed Jan 22 22:19:30 2014 -0600 @@ -1250,6 +1250,37 @@ self.assertIsInstance(f, io.RawIOBase) self.assertEqual(f.read().strip(), b"this is file A") + def test_read(self): + p = self.cls(BASE) + with (p / 'fileA').open('wb') as file: + file.write(b'abcdef') + self.assertEqual((p / 'fileA').read(3, mode='rb'), b'abc') + self.assertEqual((p / 'fileA').read(1, mode='rb'), b'a') + self.assertEqual((p / 'fileA').read(mode='rb'), b'abcdef') + + def test_readlines(self): + p = self.cls(BASE) + with (p / 'fileA').open('wb') as file: + file.write(b'abc\ndef\nh') + file.flush() + self.assertEqual((p / 'fileA').readlines(mode='rb'), + [b'abc\n', b'def\n', b'h']) + self.assertEqual((p / 'fileA').readlines(mode='rb', size=5), + [b'abc\n', b'def\n']) + + def test_write(self): + p = self.cls(BASE) + d = b'abdcefg' + (p / 'fileA').write(d, mode='wb') + with (p / 'fileA').open('rb') as file: + self.assertEqual(file.read(), d) + + def test_writelines(self): + p = self.cls(BASE) + (p / 'fileA').writelines([b'ab\n', b'cd\n', b'ef\n'], mode='wb') + with (p / 'fileA').open('rb') as file: + self.assertEqual([b'ab\n', b'cd\n', b'ef\n'], file.readlines()) + def test_iterdir(self): P = self.cls p = P(BASE)