Spaces:
Runtime error
Runtime error
| #coding=utf-8 | |
| ''' | |
| Created on 2016年9月27日 | |
| @author: dengdan | |
| Tool functions for file system operation and I/O. | |
| In the style of linux shell commands | |
| ''' | |
| import os | |
| import pickle as pkl | |
| import subprocess | |
| import logging | |
| from . import strs, io | |
| def mkdir(path): | |
| """ | |
| If the target directory does not exists, it and its parent directories will created. | |
| """ | |
| path = get_absolute_path(path) | |
| if not exists(path): | |
| os.makedirs(path) | |
| return path | |
| def make_parent_dir(path): | |
| """make the parent directories for a file.""" | |
| parent_dir = get_dir(path) | |
| mkdir(parent_dir) | |
| def pwd(): | |
| return os.getcwd() | |
| def dump(path, obj): | |
| path = get_absolute_path(path) | |
| parent_path = get_dir(path) | |
| mkdir(parent_path) | |
| with open(path, 'w') as f: | |
| logging.info('dumping file:' + path); | |
| pkl.dump(obj, f) | |
| def load(path): | |
| path = get_absolute_path(path) | |
| with open(path, 'r') as f: | |
| data = pkl.load(f) | |
| return data | |
| def join_path(a, *p): | |
| return os.path.join(a, *p) | |
| def is_dir(path): | |
| path = get_absolute_path(path) | |
| return os.path.isdir(path) | |
| is_directory = is_dir | |
| def is_path(path): | |
| path = get_absolute_path(path) | |
| return os.path.ispath(path) | |
| def get_dir(path): | |
| ''' | |
| return the directory it belongs to. | |
| if path is a directory itself, itself will be return | |
| ''' | |
| path = get_absolute_path(path) | |
| if is_dir(path): | |
| return path; | |
| return os.path.split(path)[0] | |
| def get_parent_dir(path): | |
| current_dir = get_dir(path) | |
| return get_absolute_path(join_path(current_dir, '..')) | |
| def get_filename(path): | |
| return os.path.split(path)[1] | |
| def get_absolute_path(p): | |
| if p.startswith('~'): | |
| p = os.path.expanduser(p) | |
| return os.path.abspath(p) | |
| def cd(p): | |
| p = get_absolute_path(p) | |
| os.chdir(p) | |
| def ls(path = '.', suffix = None): | |
| """ | |
| list files in a directory. | |
| return file names in a list | |
| """ | |
| path = get_absolute_path(path) | |
| files = os.listdir(path) | |
| if suffix is None: | |
| return files | |
| filtered = [] | |
| for f in files: | |
| if string.ends_with(f, suffix, ignore_case = True): | |
| filtered.append(f) | |
| return filtered | |
| def find_files(pattern): | |
| import glob | |
| return glob.glob(pattern) | |
| def read_lines(p): | |
| """return the text in a file in lines as a list """ | |
| p = get_absolute_path(p) | |
| f = open(p,'r') | |
| return f.readlines() | |
| def write_lines(p, lines, append_break = False): | |
| p = get_absolute_path(p) | |
| make_parent_dir(p) | |
| with open(p, 'w') as f: | |
| for line in lines: | |
| if append_break: | |
| f.write(line + '\n') | |
| else: | |
| f.write(line) | |
| def cat(p): | |
| """return the text in a file as a whole""" | |
| cmd = 'cat ' + p | |
| return subprocess.getoutput(cmd) | |
| def exists(path): | |
| path = get_absolute_path(path) | |
| return os.path.exists(path) | |
| def not_exists(path): | |
| return not exists(path) | |
| def load_mat(path): | |
| import scipy.io as sio # type: ignore | |
| path = get_absolute_path(path) | |
| return sio.loadmat(path) | |
| def dump_mat(path, dict_obj, append = True): | |
| import scipy.io as sio # type: ignore | |
| path = get_absolute_path(path) | |
| make_parent_dir(path) | |
| sio.savemat(file_name = path, mdict = dict_obj, appendmat = append) | |
| def dir_mat(path): | |
| ''' | |
| list the variables in mat file. | |
| return a list: [(name, shape, dtype), ...] | |
| ''' | |
| import scipy.io as sio # type: ignore | |
| path = get_absolute_path(path) | |
| return sio.whosmat(path) | |
| SIZE_UNIT_K = 1024 | |
| SIZE_UNIT_M = SIZE_UNIT_K ** 2 | |
| SIZE_UNIT_G = SIZE_UNIT_K ** 3 | |
| def get_file_size(path, unit = SIZE_UNIT_K): | |
| size = os.path.getsize(get_absolute_path(path)) | |
| return size * 1.0 / unit | |
| def create_h5(path): | |
| import h5py # type: ignore | |
| path = get_absolute_path(path) | |
| make_parent_dir(path) | |
| return h5py.File(path, 'w'); | |
| def open_h5(path, mode = 'r'): | |
| import h5py | |
| path = get_absolute_path(path) | |
| return h5py.File(path, mode); | |
| def read_h5(h5, key): | |
| return h5[key][:] | |
| def read_h5_attrs(h5, key, attrs): | |
| return h5[key].attrs[attrs] | |
| def copy(src, dest): | |
| io.make_parent_dir(dest) | |
| import shutil | |
| shutil.copy(get_absolute_path(src), get_absolute_path(dest)) | |
| cp = copy | |
| def remove(p): | |
| import os | |
| os.remove(get_absolute_path(p)) | |
| rm = remove | |
| def search(pattern, path, file_only = True): | |
| """ | |
| Search files whose name matches the give pattern. The search scope | |
| is the directory and sub-directories of 'path'. | |
| """ | |
| path = get_absolute_path(path) | |
| pattern_here = io.join_path(path, pattern) | |
| targets = [] | |
| # find matchings in current directory | |
| candidates = find_files(pattern_here) | |
| for can in candidates: | |
| if io.is_dir(can) and file_only: | |
| continue | |
| else: | |
| targets.append(can) | |
| # find matching in sub-dirs | |
| files = ls(path) | |
| for f in files: | |
| fpath = io.join_path(path, f) | |
| if is_dir(fpath): | |
| targets_in_sub_dir = search(pattern, fpath, file_only) | |
| targets.extend(targets_in_sub_dir) | |
| return targets | |
| def dump_json(path, data): | |
| import ujson as json | |
| path = get_absolute_path(path) | |
| make_parent_dir(path) | |
| with open(path, 'w') as f: | |
| json.dump(data, f) | |
| return path | |
| def load_json(path): | |
| import ujson as json | |
| path = get_absolute_path(path) | |
| with open(path, 'r') as f: | |
| return json.load(f) | |