Spaces:
Build error
Build error
# -*- coding: utf-8 -*- | |
import os | |
import re | |
from shutil import rmtree | |
def remove(path: str) -> None: | |
if os.path.exists(path): | |
if os.path.isdir(path): | |
rmtree(path) | |
else: | |
os.remove(path) | |
# find all indices of a list of strings that match a regex | |
def findall_regex(items: list[str], regex: re.Pattern[str]) -> list[int]: | |
found = list() | |
for i in range(0, len(items)): | |
k = regex.match(items[i]) | |
if k: | |
found.append(i) | |
k = None | |
return found | |
def split_by_regex(items: list[str], regex: re.Pattern[str]) -> list[list[str]]: | |
splits = list() | |
indices = findall_regex(items, regex) | |
if not indices: | |
splits.append(items) | |
return splits | |
# Add first chunk before first match | |
splits.append(items[0 : indices[0]]) | |
# Add chunks between matches | |
for i in range(len(indices) - 1): | |
splits.append(items[indices[i] : indices[i + 1]]) | |
# Add final chunk after last match | |
splits.append(items[indices[-1] :]) | |
return splits | |
# http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python | |
def which(program: str) -> str | None: | |
def is_exe(fpath: str) -> bool: | |
return os.path.isfile(fpath) and os.access(fpath, os.X_OK) | |
fpath, fname = os.path.split(program) | |
if fpath: | |
if is_exe(program): | |
return program | |
else: | |
for path in os.environ['PATH'].split(os.pathsep): | |
path = path.strip('"') | |
exe_file = os.path.join(path, program) | |
if is_exe(exe_file): | |
return exe_file | |
return None | |