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) | |