From 2491c1beb82f1d21aabf1c14e770fed527e75fe7 Mon Sep 17 00:00:00 2001 From: Jeremy Hummel Date: Thu, 15 Aug 2019 17:49:55 -0700 Subject: [PATCH] Fixes Path_utils --- utils/Path_utils.py | 55 +++++++++++++++++++++++----------------- utils/test/Path_utils.py | 15 +++++++++++ 2 files changed, 47 insertions(+), 23 deletions(-) create mode 100644 utils/test/Path_utils.py diff --git a/utils/Path_utils.py b/utils/Path_utils.py index d34e348..e82b34f 100644 --- a/utils/Path_utils.py +++ b/utils/Path_utils.py @@ -1,18 +1,21 @@ +from operator import attrgetter from pathlib import Path from os import scandir image_extensions = [".jpg", ".jpeg", ".png", ".tif", ".tiff"] + def get_image_paths(dir_path, image_extensions=image_extensions): - dir_path = Path (dir_path) + dir_path = Path(dir_path) result = [] if dir_path.exists(): - for x in list(scandir(str(dir_path))): + for x in scandir(str(dir_path)): if any([x.name.lower().endswith(ext) for ext in image_extensions]): result.append(x.path) return sorted(result) + def get_image_unique_filestem_paths(dir_path, verbose_print_func=None): result = get_image_paths(dir_path) result_dup = set() @@ -22,46 +25,50 @@ def get_image_unique_filestem_paths(dir_path, verbose_print_func=None): if f_stem in result_dup: result.remove(f) if verbose_print_func is not None: - verbose_print_func ("Duplicate filenames are not allowed, skipping: %s" % Path(f).name ) + verbose_print_func("Duplicate filenames are not allowed, skipping: %s" % Path(f).name) continue result_dup.add(f_stem) return sorted(result) - + + def get_file_paths(dir_path): - dir_path = Path (dir_path) + dir_path = Path(dir_path) result = [] if dir_path.exists(): - return [ x.path for x in list(scandir(str(dir_path))) if x.is_file() ] + return [x.path for x in scandir(str(dir_path)) if x.is_file()] return sorted(result) - -def get_all_dir_names (dir_path): - dir_path = Path (dir_path) + + +def get_all_dir_names(dir_path): + dir_path = Path(dir_path) result = [] if dir_path.exists(): - return [ x.name for x in list(scandir(str(dir_path))) if x.is_dir() ] - + return [x.name for x in scandir(str(dir_path)) if x.is_dir()] + return sorted(result) - -def get_all_dir_names_startswith (dir_path, startswith): - dir_path = Path (dir_path) + + +def get_all_dir_names_startswith(dir_path, startswith): + dir_path = Path(dir_path) startswith = startswith.lower() result = [] if dir_path.exists(): - for x in list(scandir(str(dir_path))): + for x in scandir(str(dir_path)): if x.name.lower().startswith(startswith): - result.append ( x.name[len(startswith):] ) + result.append(x.name[len(startswith):]) return sorted(result) -def get_first_file_by_stem (dir_path, stem, exts=None): - dir_path = Path (dir_path) + +def get_first_file_by_stem(dir_path, stem, exts=None): + dir_path = Path(dir_path) stem = stem.lower() if dir_path.exists(): - for x in sorted(list(scandir(str(dir_path)))): + for x in sorted(scandir(str(dir_path)), key=attrgetter('name')): if not x.is_file(): continue xp = Path(x.path) @@ -70,13 +77,15 @@ def get_first_file_by_stem (dir_path, stem, exts=None): return None -def move_all_files (src_dir_path, dst_dir_path): + +def move_all_files(src_dir_path, dst_dir_path): paths = get_file_paths(src_dir_path) for p in paths: p = Path(p) - p.rename ( Path(dst_dir_path) / p.name ) - -def delete_all_files (dir_path): + p.rename(Path(dst_dir_path) / p.name) + + +def delete_all_files(dir_path): paths = get_file_paths(dir_path) for p in paths: p = Path(p) diff --git a/utils/test/Path_utils.py b/utils/test/Path_utils.py new file mode 100644 index 0000000..e1d6157 --- /dev/null +++ b/utils/test/Path_utils.py @@ -0,0 +1,15 @@ +import unittest + +from utils.Path_utils import get_first_file_by_stem + + +class PathUtilsTests(unittest.TestCase): + def test_get_first_file_by_stem(self): + first_file = get_first_file_by_stem('../..', 'README') + self.assertEqual(first_file.stem, 'README') + self.assertEqual(first_file.suffix, '.md') + self.assertEqual(first_file.name, 'README.md') + + +if __name__ == '__main__': + unittest.main()