17.3. Pathlib Files
17.3.1. SetUp
>>> from pathlib import Path
17.3.2. Create File
Touch creates a file
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.touch()
17.3.3. Is File
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.is_file()
True
17.3.4. Read Text
>>> myfile = Path('/tmp/myfile.txt')
>>> result = myfile.read_text()
17.3.5. Name
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.name
'myfile.txt'
17.3.6. Stem
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.stem
'myfile'
17.3.7. Parent
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.parent
PosixPath('/tmp')
17.3.8. Suffix
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.suffix
'.txt'
17.3.9. Suffixes
>>> myfile = Path('/tmp/myfile.txt')
>>> myfile.suffixes
['.txt']
17.3.10. Glob and Rglob
SetUp:
>>> mydir = Path('/tmp/mydir/')
>>> mydir.mkdir(exist_ok=True)
>>> (mydir / 'myfile1.md').touch()
>>> (mydir / 'myfile2.md').touch()
Usage:
>>> mydir.glob('*.md')
<map object at 0x...>
>>>
>>> sorted(mydir.glob('*.md'))
[PosixPath('/tmp/mydir/myfile1.md'), PosixPath('/tmp/mydir/myfile2.md')]
>>> sorted(mydir.rglob('*.md'))
[PosixPath('/tmp/mydir/myfile1.md'), PosixPath('/tmp/mydir/myfile2.md')]
17.3.11. Join Paths
>>> mydir = Path('/tmp/mydirectory/')
>>> myfile = mydir / 'myfile.txt'
>>> myfile = Path('/')
>>> myfile /= 'tmp'
>>> myfile /= 'mydirectory'
>>> myfile /= 'myfile.txt'
17.3.12. Stat
$ stat -r /tmp/mydir/myfile.txt
16777234 74991501 0100644 1 501 0 0 23 1739435370 1739435370 1739435522 1739434616 4096 8 64 /tmp/mydirectory/myfile.txt
$ stat /tmp/mydir/myfile.txt
16777234 74991501 -rw-r--r-- 1 matt wheel 0 23 "Feb 13 09:29:30 2025" "Feb 13 09:29:30 2025" "Feb 13 09:32:02 2025" "Feb 13 09:16:56 2025" 4096 8 0x40 /tmp/mydirectory/myfile.txt
>>> myfile = Path('/tmp/mydir/myfile.txt')
>>> myfile.stat()
os.stat_result(st_mode=33188, st_ino=73966028, st_dev=16777234, st_nlink=1, st_uid=501, st_gid=20, st_size=8965, st_atime=1739174544, st_mtime=1739174544, st_ctime=1739174544)
>>> oct(33188)
'0o100644'
>>> from datetime import datetime, timezone
>>>
>>> datetime.fromtimestamp(1739174544, tz=timezone.utc)
datetime.datetime(2025, 2, 10, 8, 2, 24, tzinfo=datetime.timezone.utc)
17.3.13. Use Case - 1
>>> FILE = '/tmp/mydir/myfile.txt'
>>> with open(FILE) as file:
... content = file.read()
>>> FILE = Path('/tmp/mydir/myfile.txt')
>>> with open(FILE) as file:
... content = file.read()
>>> file = Path('/tmp/mydir/myfile.txt')
>>> result = file.read_text()
17.3.14. Use Case - 1
>>> from itertools import chain
>>>
>>>
>>> mydir = Path('/tmp/mydir')
>>> files = chain(
... mydir.rglob('*.md'),
... mydir.rglob('*.html'),
... )
>>>
>>> for file in sorted(files):
... print(file)
...
/tmp/mydir/myfile1.md
/tmp/mydir/myfile2.md
17.3.15. Use Case - 2
>>> directories = [
... '/tmp/mydir',
... '/tmp/newdir',
... '/tmp/otherdir',
... ]
>>> for directory in map(Path, directories):
... print(directory.exists())
...
True
False
False
>>> for directory in map(Path, directories):
... for file in directory.rglob('*.txt'):
... print(file)
...
/tmp/mydir/myfile.txt
17.3.16. Use Case - 3
>>> directories = [
... Path('/tmp/mydir'),
... Path('/tmp/newdir'),
... Path('/tmp/otherdir'),
... ]
>>>
>>> for directory in directories:
... directory.exists()
...
True
False
False