import os all_headers = {} for root, dirs, files in os.walk("."): if root.startswith("."): root = root[1:] root = root.replace("\\", "/") if root.startswith("/"): root = root[1:] if root and not root.endswith("/"): root += "/" for f in files: if f.endswith((".h", ".hpp")): all_headers[f] = root print(all_headers) for root, dirs, files in os.walk("."): if root.startswith("."): root = root[1:] root = root.replace("\\", "/") if root.startswith("/"): root = root[1:] if root and not root.endswith("/"): root += "/" for f in files: if not f.endswith((".h", ".hpp", ".c", ".cpp", ".cc")): continue temp = "" with open(root + f, encoding="utf-8") as fp: for line in fp.readlines(): if line.startswith("#include") and "<" not in line: if "/" in line: header = line[line.rindex("/") + 1 : len(line) - 2] else: header = line[line.index('"') + 1 : len(line) - 2] if header in all_headers: new_header = all_headers[header].replace(root, "") new_line = f'#include "{new_header}{header}"\n' print(new_line) temp += new_line else: temp += line else: temp += line with open(root + f, mode="w", encoding="utf-8") as fp: fp.write(temp)