Source code for AFQ.utils.path

import os.path as op
import os
import json


[docs]def write_json(fname, data): """ Write data to JSON file. Parameters ---------- fname : str Full path to the file to write. data : dict A dict containing the data to write. Returns ------- None """ with open(fname, 'w') as ff: json.dump(data, ff, default=lambda obj: "Not Serializable")
[docs]def read_json(fname): """ Read data from a JSON file. Parameters ---------- fname : str Full path to the data-containing file Returns ------- dict """ with open(fname, 'r') as ff: out = json.load(ff) return out
[docs]def drop_extension(path): base_fname = op.basename(path).split('.')[0] return path.split(base_fname)[0] + base_fname
[docs]def apply_cmd_to_afq_derivs( derivs_dir, base_fname, cmd="rm", exception_file_names=[], suffix="", dependent_on=None): if dependent_on is None: dependent_on_list = ["dwi", "trk", "rec", "prof"] elif dependent_on.lower() == "track": dependent_on_list = ["trk", "rec", "prof"] elif dependent_on.lower() == "recog": dependent_on_list = ["rec", "prof"] elif dependent_on.lower() == "prof": dependent_on_list = ["prof"] else: raise ValueError(( "dependent_on must be one of " "None, 'track', 'recog', 'prof'.")) for filename in os.listdir(derivs_dir): full_path = os.path.join(derivs_dir, filename) if os.path.isfile(full_path) or os.path.islink(full_path): if (full_path in exception_file_names)\ or (not full_path.startswith(base_fname))\ or filename.endswith("json"): continue sidecar_file = f'{drop_extension(full_path)}.json' if op.exists(sidecar_file): sidecar_info = read_json(sidecar_file) if "dependent" in sidecar_info\ and sidecar_info["dependent"]\ in dependent_on_list: os.system(f"{cmd} {full_path} {suffix}") os.system(f"{cmd} {sidecar_file} {suffix}") else: os.system(f"{cmd} {full_path} {suffix}") elif os.path.isdir(full_path): # other than ROIs, folders are dependent on everything if dependent_on is None or filename != "ROIs": os.system(f"{cmd} -r {full_path} {suffix}")