Small Standard Library Projects
Path Extension Report
pathlib.PurePosixPath lets code reason about path strings without reading the host filesystem.
pure path
A pure path parses path text only; it does not check whether files exist.
Path Extension Report
path_extension_report.py
Replay: real traced execution (multi-file project)
from pathlib import PurePosixPath
root = "docs"
paths = [
PurePosixPath(root) / "guide" / "intro.md",
PurePosixPath(root) / "guide" / "api.md",
PurePosixPath(root) / "images" / "logo.png",
]
markdown = []
for path in paths:
if path.suffix == ".md":
markdown.append(path.stem)
print("root=" + root)
print("parent=" + paths[0].parent.as_posix())
print("markdown=" + ",".join(markdown))
from pathlib import PurePosixPath
root = "src"
paths = [
PurePosixPath(root) / "guide" / "intro.md",
PurePosixPath(root) / "guide" / "api.md",
PurePosixPath(root) / "images" / "logo.png",
]
markdown = []
for path in paths:
if path.suffix == ".md":
markdown.append(path.stem)
print("root=" + root)
print("parent=" + paths[0].parent.as_posix())
print("markdown=" + ",".join(markdown))
from pathlib import PurePosixPath
root = "assets"
paths = [
PurePosixPath(root) / "guide" / "intro.md",
PurePosixPath(root) / "guide" / "api.md",
PurePosixPath(root) / "images" / "logo.png",
]
markdown = []
for path in paths:
if path.suffix == ".md":
markdown.append(path.stem)
print("root=" + root)
print("parent=" + paths[0].parent.as_posix())
print("markdown=" + ",".join(markdown))
root ← docs, paths ← [PurePosixPath('docs/guide/intro.md'), PurePosixPath('docs/guide/api.md'), PurePosixPath('docs/images/logo.png')]
3root→ docs = "docs" #@root="src", "assets"45paths→ [PurePosixPath('docs/guide/intro.md'), PurePosixPath('docs/guide/api.md'), PurePosixPath('docs/images/logo.png')] = [6 PurePosixPath(rootdocs) / "guide" / "intro.md",7 PurePosixPath(rootdocs) / "guide" / "api.md",8 PurePosixPath(rootdocs) / "images" / "logo.png",9]1011markdown→ [] = []12for path in paths:for path in paths:
pass 1 of 311markdown = []12for pathdocs/guide/intro.md in paths[PurePosixPath('docs/guide/intro.md'), PurePosixPath('docs/guide/api.md'), PurePosixPath('docs/images/logo.png')]:13 if path.suffix == ".md":14 markdown.append(path.stem)All 3 passes — pass 1 is the card above pass pathpath.suffixpath.stemmarkdown1 docs/guide/intro.md .md intro [] → ['intro'] 2 docs/guide/api.md .md api ['intro'] → ['intro', 'api'] 3 docs/images/logo.png — — — markdown ← ['intro']
pass 1 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro'].append(path.stemintro)markdown ← ['intro', 'api']
pass 2 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro', 'api'].append(path.stemapi)print("root=" + root)
16print("root=" + rootdocs)17print("parent=" + paths[0].parentdocs/guide.as_posix())18print("markdown=" + ",".join(markdown['intro', 'api']))outputroot=docs parent=docs/guide markdown=intro,api
root ← src, paths ← [PurePosixPath('src/guide/intro.md'), PurePosixPath('src/guide/api.md'), PurePosixPath('src/images/logo.png')]
3root→ src = "src"45paths→ [PurePosixPath('src/guide/intro.md'), PurePosixPath('src/guide/api.md'), PurePosixPath('src/images/logo.png')] = [6 PurePosixPath(rootsrc) / "guide" / "intro.md",7 PurePosixPath(rootsrc) / "guide" / "api.md",8 PurePosixPath(rootsrc) / "images" / "logo.png",9]1011markdown→ [] = []12for path in paths:for path in paths:
pass 1 of 311markdown = []12for pathsrc/guide/intro.md in paths[PurePosixPath('src/guide/intro.md'), PurePosixPath('src/guide/api.md'), PurePosixPath('src/images/logo.png')]:13 if path.suffix == ".md":14 markdown.append(path.stem)All 3 passes — pass 1 is the card above pass pathpath.suffixpath.stemmarkdown1 src/guide/intro.md .md intro [] → ['intro'] 2 src/guide/api.md .md api ['intro'] → ['intro', 'api'] 3 src/images/logo.png — — — markdown ← ['intro']
pass 1 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro'].append(path.stemintro)markdown ← ['intro', 'api']
pass 2 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro', 'api'].append(path.stemapi)print("root=" + root)
16print("root=" + rootsrc)17print("parent=" + paths[0].parentsrc/guide.as_posix())18print("markdown=" + ",".join(markdown['intro', 'api']))outputroot=src parent=src/guide markdown=intro,api
root ← assets, paths ← [PurePosixPath('assets/guide/intro.md'), PurePosixPath('assets/guide/api.md'), PurePosixPath('assets/images/logo.png')]
3root→ assets = "assets"45paths→ [PurePosixPath('assets/guide/intro.md'), PurePosixPath('assets/guide/api.md'), PurePosixPath('assets/images/logo.png')] = [6 PurePosixPath(rootassets) / "guide" / "intro.md",7 PurePosixPath(rootassets) / "guide" / "api.md",8 PurePosixPath(rootassets) / "images" / "logo.png",9]1011markdown→ [] = []12for path in paths:for path in paths:
pass 1 of 311markdown = []12for pathassets/guide/intro.md in paths[PurePosixPath('assets/guide/intro.md'), PurePosixPath('assets/guide/api.md'), PurePosixPath('assets/images/logo.png')]:13 if path.suffix == ".md":14 markdown.append(path.stem)All 3 passes — pass 1 is the card above pass pathpath.suffixpath.stemmarkdown1 assets/guide/intro.md .md intro [] → ['intro'] 2 assets/guide/api.md .md api ['intro'] → ['intro', 'api'] 3 assets/images/logo.png — — — markdown ← ['intro']
pass 1 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro'].append(path.stemintro)markdown ← ['intro', 'api']
pass 2 of 212for path in paths:13 if path.suffix.md == ".md":14 markdown→ ['intro', 'api'].append(path.stemapi)print("root=" + root)
16print("root=" + rootassets)17print("parent=" + paths[0].parentassets/guide.as_posix())18print("markdown=" + ",".join(markdown['intro', 'api']))outputroot=assets parent=assets/guide markdown=intro,api