FileUtils.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # Copyright (c) 2023 Felix Kleinsteuber and Computer Vision Group, Friedrich Schiller University Jena
  2. # This file defines helper functions for processing files.
  3. from glob import glob
  4. import os
  5. import pickle
  6. expected_subfolders = sorted(["Motion", "Lapse", "Full"])
  7. def list_folders(path: str) -> list:
  8. """Returns the names of all immediate child folders of path.
  9. Args:
  10. path (str): path to search
  11. Returns:
  12. list: list of all child folder names
  13. """
  14. return [name for name in os.listdir(path) if os.path.isdir(os.path.join(path, name))]
  15. def list_jpegs_recursive(path: str) -> list:
  16. """Recursively lists all jpeg files in path.
  17. Args:
  18. path (str): path to search
  19. Returns:
  20. list: list of all jpeg files
  21. """
  22. print(os.path.join(path, "**/*.jpg"))
  23. return [name for name in glob(os.path.join(path, "**/*.jpg"), recursive=True) if os.path.isfile(os.path.join(path, name))]
  24. def verify_expected_subfolders(session_path: str):
  25. """Assert that the given session folder contains exactly the three subfolders Motion, Lapse, Full.
  26. Args:
  27. session_path (str): session folder path
  28. """
  29. subfolders = list_folders(session_path)
  30. if sorted(subfolders) != sorted(expected_subfolders):
  31. raise AssertionError(f"{session_path}: Expected subfolders {expected_subfolders} but found {subfolders}")
  32. # Pickle helpers
  33. def dump(filename: str, data):
  34. """Dumps data using pickle.
  35. Args:
  36. filename (str): Target file name.
  37. data (any): Data.
  38. """
  39. with open(filename, "wb") as f:
  40. pickle.dump(data, f, protocol=pickle.HIGHEST_PROTOCOL)
  41. def load(filename: str):
  42. """Loads data using pickle.
  43. Args:
  44. filename (str): Target file name.
  45. Returns:
  46. any: loaded data
  47. """
  48. with open(filename, "rb") as f:
  49. return pickle.load(f)