Spaces:
Runtime error
Runtime error
File size: 5,519 Bytes
01bb3bb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
#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)
|