Spaces:
Build error
Build error
| #!C:\Python312\python.exe | |
| # encoding: utf-8 | |
| """Find and (optionally) delete corrupt Whisper data files""" | |
| import argparse | |
| import os | |
| import sys | |
| import logging | |
| try: | |
| import whisper | |
| except ImportError: | |
| raise SystemExit("[ERROR] Please make sure Whisper is installed properly") | |
| def setup_logging(verbose=False): | |
| """Configure logging.""" | |
| logging.basicConfig( | |
| level=logging.DEBUG if verbose else logging.INFO, | |
| format="%(asctime)s [%(levelname)s]: %(message)s", | |
| datefmt="%Y-%m-%d %H:%M:%S", | |
| ) | |
| def walk_dir(base_dir, delete_corrupt=False, backup_corrupt=False): | |
| """Walk through directories to find and handle corrupt Whisper files.""" | |
| total_files = 0 | |
| corrupt_files = 0 | |
| deleted_files = 0 | |
| for dirpath, _, filenames in os.walk(base_dir): | |
| logging.info("Scanning %s...", dirpath) | |
| whisper_files = (os.path.join(dirpath, f) for f in filenames if f.endswith(".wsp")) | |
| for f in whisper_files: | |
| total_files += 1 | |
| try: | |
| info = whisper.info(f) | |
| logging.debug("%s: %d points", f, sum(i["points"] for i in info.get("archives", {}))) | |
| except whisper.CorruptWhisperFile: | |
| corrupt_files += 1 | |
| if backup_corrupt: | |
| backup_path = f + ".bak" | |
| try: | |
| os.rename(f, backup_path) | |
| logging.warning("Backed up corrupt file: %s -> %s", f, backup_path) | |
| except OSError as e: | |
| logging.error("Failed to back up %s: %s", f, e) | |
| continue | |
| if delete_corrupt: | |
| try: | |
| os.unlink(f) | |
| deleted_files += 1 | |
| logging.warning("Deleted corrupt file: %s", f) | |
| except OSError as e: | |
| logging.error("Failed to delete %s: %s", f, e) | |
| else: | |
| logging.error("Corrupt Whisper file: %s", f) | |
| logging.info("Summary: Scanned %d files, Found %d corrupt, Deleted %d", total_files, corrupt_files, deleted_files) | |
| return total_files, corrupt_files, deleted_files | |
| if __name__ == "__main__": | |
| parser = argparse.ArgumentParser(description=__doc__.strip()) | |
| parser.add_argument("--delete-corrupt", action="store_true", help="Delete reported corrupt files") | |
| parser.add_argument("--backup-corrupt", action="store_true", help="Back up corrupt files before deletion") | |
| parser.add_argument("--verbose", action="store_true", help="Display detailed progress") | |
| parser.add_argument("directories", type=str, nargs="+", metavar="WHISPER_DIR", help="Directory containing Whisper files") | |
| args = parser.parse_args() | |
| setup_logging(verbose=args.verbose) | |
| for d in args.directories: | |
| d = os.path.realpath(d) | |
| if not os.path.isdir(d): | |
| logging.error("%s is not a directory!", d) | |
| continue | |
| walk_dir(d, delete_corrupt=args.delete_corrupt, backup_corrupt=args.backup_corrupt) | |