from pathlib import Path import json import os import os.path as osp import re import shutil def is_number(s): try: float(s) return True except ValueError: return False def may_create_folder(folder_path): if not osp.exists(folder_path): oldmask = os.umask(000) os.makedirs(folder_path, mode=0o777) os.umask(oldmask) return True return False def make_clean_folder(folder_path): success = may_create_folder(folder_path) if not success: shutil.rmtree(folder_path) may_create_folder(folder_path) def sorted_alphanum(file_list_ordered): convert = lambda text: int(text) if text.isdigit() else text alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key) if len(c) > 0] return sorted(file_list_ordered, key=alphanum_key) def list_files(folder_path, name_filter, alphanum_sort=False): file_list = [p.name for p in list(Path(folder_path).glob(name_filter))] if alphanum_sort: return sorted_alphanum(file_list) else: return sorted(file_list) def list_folders(folder_path, name_filter=None, alphanum_sort=False): folders = list() for subfolder in Path(folder_path).iterdir(): if subfolder.is_dir() and not subfolder.name.startswith('.'): folder_name = subfolder.name if name_filter is not None: if name_filter in folder_name: folders.append(folder_name) else: folders.append(folder_name) if alphanum_sort: return sorted_alphanum(folders) else: return sorted(folders) def read_lines(file_path): with open(file_path, 'r') as fin: lines = [line.strip() for line in fin.readlines() if len(line.strip()) > 0] return lines def read_strings(file_path): with open(file_path, 'r') as fin: ret = fin.readlines() return ''.join(ret) def read_json(filepath): with open(filepath, 'r') as fh: ret = json.load(fh) return ret