From 8c0e2fb362219a9ade478800496f51c43c6cedaa Mon Sep 17 00:00:00 2001 From: hardikdava Date: Mon, 17 Jun 2024 20:44:48 +0200 Subject: [PATCH] exposing some file utilities --- supervision/__init__.py | 10 +++++++++- supervision/utils/file.py | 24 ++++++++++++------------ 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/supervision/__init__.py b/supervision/__init__.py index 4f28d49f..2a311c7a 100644 --- a/supervision/__init__.py +++ b/supervision/__init__.py @@ -90,7 +90,15 @@ from supervision.keypoint.core import KeyPoints from supervision.metrics.detection import ConfusionMatrix, MeanAveragePrecision from supervision.tracker.byte_tracker.core import ByteTrack from supervision.utils.conversion import cv2_to_pillow, pillow_to_cv2 -from supervision.utils.file import list_files_with_extensions +from supervision.utils.file import ( + list_files_with_extensions, + read_json_file, + read_txt_file, + read_yaml_file, + save_json_file, + save_text_file, + save_yaml_file, +) from supervision.utils.image import ( ImageSink, create_tiles, diff --git a/supervision/utils/file.py b/supervision/utils/file.py index dfce7eb0..5b7baea3 100644 --- a/supervision/utils/file.py +++ b/supervision/utils/file.py @@ -57,7 +57,7 @@ def list_files_with_extensions( return files_with_extensions -def read_txt_file(file_path: str, skip_empty: bool = False) -> List[str]: +def read_txt_file(file_path: Union[str, Path], skip_empty: bool = False) -> List[str]: """ Read a text file and return a list of strings without newline characters. Optionally skip empty lines. @@ -70,7 +70,7 @@ def read_txt_file(file_path: str, skip_empty: bool = False) -> List[str]: Returns: List[str]: A list of strings representing the lines in the text file. """ - with open(file_path, "r") as file: + with open(file_path.as_posix(), "r") as file: if skip_empty: lines = [line.rstrip("\n") for line in file if line.strip()] else: @@ -79,7 +79,7 @@ def read_txt_file(file_path: str, skip_empty: bool = False) -> List[str]: return lines -def save_text_file(lines: List[str], file_path: str): +def save_text_file(lines: List[str], file_path: Union[str, Path]): """ Write a list of strings to a text file, each string on a new line. @@ -87,12 +87,12 @@ def save_text_file(lines: List[str], file_path: str): lines (List[str]): The list of strings to be written to the file. file_path (str): The path to the text file. """ - with open(file_path, "w") as file: + with open(file_path.as_posix(), "w") as file: for line in lines: file.write(line + "\n") -def read_json_file(file_path: str) -> dict: +def read_json_file(file_path: Union[str, Path]) -> dict: """ Read a json file and return a dict. @@ -102,12 +102,12 @@ def read_json_file(file_path: str) -> dict: Returns: dict: A dict of annotations information """ - with open(file_path, "r") as file: + with open(file_path.as_posix(), "r") as file: data = json.load(file) return data -def save_json_file(data: dict, file_path: str, indent: int = 3) -> None: +def save_json_file(data: dict, file_path: Union[str, Path], indent: int = 3) -> None: """ Write a dict to a json file. @@ -116,11 +116,11 @@ def save_json_file(data: dict, file_path: str, indent: int = 3) -> None: data (dict): dict with unique keys and value as pair. file_path (str): The path to the json file. """ - with open(file_path, "w") as fp: + with open(file_path.as_posix(), "w") as fp: json.dump(data, fp, cls=NumpyJsonEncoder, indent=indent) -def read_yaml_file(file_path: str) -> dict: +def read_yaml_file(file_path: Union[str, Path]) -> dict: """ Read a yaml file and return a dict. @@ -130,12 +130,12 @@ def read_yaml_file(file_path: str) -> dict: Returns: dict: A dict of content information """ - with open(file_path, "r") as file: + with open(file_path.as_posix(), "r") as file: data = yaml.safe_load(file) return data -def save_yaml_file(data: dict, file_path: str) -> None: +def save_yaml_file(data: dict, file_path: Union[str, Path]) -> None: """ Save a dict to a json file. @@ -145,5 +145,5 @@ def save_yaml_file(data: dict, file_path: str) -> None: file_path (str): The path to the json file. """ - with open(file_path, "w") as outfile: + with open(file_path.as_posix(), "w") as outfile: yaml.dump(data, outfile, sort_keys=False, default_flow_style=None)