| 1234567891011121314151617181920212223242526272829303132 |
- import glob
- import os
- from typing import List
- import matplotlib.pyplot as plt
- class SavefigRedirect:
- """Контекст, который перенаправляет plt.savefig('data/...') в нужную папку."""
- def __init__(self, base_dir: str):
- self.base_dir = base_dir
- self._orig = None
- def __enter__(self):
- self._orig = plt.savefig
- def _patched(fname, *args, **kwargs):
- if isinstance(fname, str) and (fname.startswith("data\\") or fname.startswith("data/")):
- out = os.path.join(self.base_dir, fname.replace("data\\", "data/").replace("data/", "data/"))
- os.makedirs(os.path.dirname(out), exist_ok=True)
- return self._orig(out, *args, **kwargs)
- return self._orig(fname, *args, **kwargs)
- plt.savefig = _patched
- return self
- def __exit__(self, exc_type, exc, tb):
- if self._orig:
- plt.savefig = self._orig
- def collect_outputs(work_dir: str) -> List[str]:
- candidates = []
- candidates += glob.glob(os.path.join(work_dir, "data", "**", "*.*"), recursive=True)
- candidates += glob.glob(os.path.join(work_dir, "*.png"))
- out = [p for p in sorted(set(candidates)) if os.path.isfile(p)]
- return out
|