Source code for dicom3d.data.getfiles

from os.path import abspath, join, dirname
from os import walk
import fnmatch

# for future use
# currently set to the current working directory
DATA_ROOT = abspath('.')

[docs]def walk_data(base, pattern, search_files=True, search_dirs=False): """ Enuerates the files in data directory """ # if the user forgot to add them pattern = "*" + pattern + "*" files = [] for root, dirnames, filenames in walk(base): # filter only directories if search_dirs: for directory in dirnames: dirname_filter = fnmatch.filter([join(root, directory)], pattern) if len(dirname_filter): files.append(dirname_filter[0]) # filter only files if search_files: for filename in filenames: filename_filter = fnmatch.filter([join(root, filename)], pattern) if len(filename_filter): files.append(filename_filter[0]) return files
[docs]def select_file(base_dir, pattern, search_files, search_dirs, selection_name, truncate_abspath=True): """ Enumerates all files and folders starting from *base_dir* and prints to the console file options matching given *pattern*, waiting for the user to interactively select a file. If the user aborted the process, the function will run **exit** to abort the program. Args: base_dir (str): base directory to start search from pattern (str): wildcard pattern to select files or folders (e.g. *.dcm) search_files (bool): True to add files to the resulted list search_dirs (bool): True to add directories to the resulted list truncate_abspath (bool, optional): option to truncate **base_dir** from the printed paths Returns: str: the path to the selected file """ # enumerate test data directories, to lookup for series of DICOM files selected_files = walk_data( base_dir, pattern, search_files=search_files, search_dirs=search_dirs ) # make all paths relative if truncate_abspath: selected_files = [ fullpath[len(base_dir)+1:] for fullpath in selected_files if "__" not in fullpath ] # empty selection?! if len(selected_files) == 0: print("No '%s' found in '%s'" % (pattern, base_dir)) exit(-1) for idx, file in enumerate(selected_files): print("[%2d] - %s" % (idx+1, file)) # users can select what series to process try: while True: selection = input("Select %s [1-%d]: " % ( selection_name, len(selected_files)) ) selection = int(selection) if selection > len(selected_files) or selection < 1: print("Invalid selection: %s" % selection) continue break selection_path = selected_files[selection-1] except Exception as e: print("Exception: ", e) exit(-1) except KeyboardInterrupt: print("\nGood bye!") exit(0) return selection_path
[docs]def get_testdata_files(pattern="*"): """ Return test data files from dicom3d data root directory """ data_path = join(DATA_ROOT, 'test_files') files = walk_data( base=data_path, pattern=pattern, search_files=True, search_dirs=False) return [filename for filename in files if not filename.endswith('.py')]
[docs]def get_testdata_dirs(pattern="*"): """ Return test data folders from dicom3d data root directory """ data_path = join(DATA_ROOT, 'test_files') dirs = walk_data( base=data_path, pattern=pattern, search_files=False, search_dirs=True) return [dirname for dirname in dirs]