Create a modified version of this path. the following keyword arguments modify various path parts:: a:/some/path/to/a/file.ext xx drive xxxxxxxxxxxxxxxxx dirname xxxxxxxx basename
(self, **kw)
| 638 | f.close() |
| 639 | |
| 640 | def new(self, **kw): |
| 641 | """Create a modified version of this path. |
| 642 | the following keyword arguments modify various path parts:: |
| 643 | |
| 644 | a:/some/path/to/a/file.ext |
| 645 | xx drive |
| 646 | xxxxxxxxxxxxxxxxx dirname |
| 647 | xxxxxxxx basename |
| 648 | xxxx purebasename |
| 649 | xxx ext |
| 650 | """ |
| 651 | obj = object.__new__(self.__class__) |
| 652 | if not kw: |
| 653 | obj.strpath = self.strpath |
| 654 | return obj |
| 655 | drive, dirname, _basename, purebasename, ext = self._getbyspec( |
| 656 | "drive,dirname,basename,purebasename,ext" |
| 657 | ) |
| 658 | if "basename" in kw: |
| 659 | if "purebasename" in kw or "ext" in kw: |
| 660 | raise ValueError(f"invalid specification {kw!r}") |
| 661 | else: |
| 662 | pb = kw.setdefault("purebasename", purebasename) |
| 663 | try: |
| 664 | ext = kw["ext"] |
| 665 | except KeyError: |
| 666 | pass |
| 667 | else: |
| 668 | if ext and not ext.startswith("."): |
| 669 | ext = "." + ext |
| 670 | kw["basename"] = pb + ext |
| 671 | |
| 672 | if "dirname" in kw and not kw["dirname"]: |
| 673 | kw["dirname"] = drive |
| 674 | else: |
| 675 | kw.setdefault("dirname", dirname) |
| 676 | kw.setdefault("sep", self.sep) |
| 677 | obj.strpath = normpath("{dirname}{sep}{basename}".format(**kw)) |
| 678 | return obj |
| 679 | |
| 680 | def _getbyspec(self, spec: str) -> list[str]: |
| 681 | """See new for what 'spec' can be.""" |