forked from TheAlgorithms/Python
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_directory_md.py
executable file
·46 lines (35 loc) · 1.51 KB
/
build_directory_md.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python3
importos
fromcollections.abcimportIterator
defgood_file_paths(top_dir: str=".") ->Iterator[str]:
fordir_path, dir_names, filenamesinos.walk(top_dir):
dir_names[:] = [
d
fordindir_names
ifd!="scripts"andd[0] notin"._"and"venv"notind
]
forfilenameinfilenames:
iffilename=="__init__.py":
continue
ifos.path.splitext(filename)[1] in (".py", ".ipynb"):
yieldos.path.join(dir_path, filename).lstrip("./")
defmd_prefix(i):
returnf"{i*' '}*"ifielse"\n##"
defprint_path(old_path: str, new_path: str) ->str:
old_parts=old_path.split(os.sep)
fori, new_partinenumerate(new_path.split(os.sep)):
if (i+1>len(old_parts) orold_parts[i] !=new_part) andnew_part:
print(f"{md_prefix(i)}{new_part.replace('_', ' ').title()}")
returnnew_path
defprint_directory_md(top_dir: str=".") ->None:
old_path=""
forfilepathinsorted(good_file_paths(top_dir)):
filepath, filename=os.path.split(filepath)
iffilepath!=old_path:
old_path=print_path(old_path, filepath)
indent= (filepath.count(os.sep) +1) iffilepathelse0
url=f"{filepath}/{filename}".replace(" ", "%20")
filename=os.path.splitext(filename.replace("_", " ").title())[0]
print(f"{md_prefix(indent)} [{filename}]({url})")
if__name__=="__main__":
print_directory_md(".")