Files
bg-mountains-scraping-routes/parse-archives.py
2026-05-10 14:39:54 +03:00

75 lines
2.7 KiB
Python

import os
import sys
from pathlib import Path
# Install these first:
# pip install patool py7zr rarfile
try:
from patoolib import extract_archive
except ImportError:
print("Error: 'patool' is not installed. Run: pip install patool py7zr rarfile")
sys.exit(1)
def extract_archive_to_folder(archive_path: Path, base_dir: Path):
"""Extract a single archive to extracted_{name} folder."""
# Get archive name without extension
name_without_ext = archive_path.stem
extract_dir = base_dir / f"bg_mountains_{name_without_ext}"
# Create the output directory if it doesn't exist
extract_dir.mkdir(parents=True, exist_ok=True)
print(f"Extracting: {archive_path.name}{extract_dir.name}/")
try:
# patool automatically detects format (zip, rar, 7z, etc.)
extract_archive(str(archive_path), outdir=str(extract_dir), verbosity=0)
print(f"✓ Successfully extracted: {archive_path.name}\n")
except Exception as e:
print(f"✗ Failed to extract {archive_path.name}: {e}\n")
def main(folder_path: str = ".", recursive: bool = False):
base_dir = Path(folder_path).resolve()
if not base_dir.exists():
print(f"Error: Folder '{base_dir}' does not exist.")
return
print(f"Scanning for archives in: {base_dir}\n")
# Supported extensions
extensions = {'.zip', '.rar', '.7z'}
# Find all matching archives
if recursive:
archive_files = [p for p in base_dir.rglob("*") if p.is_file() and p.suffix.lower() in extensions]
else:
archive_files = [p for p in base_dir.iterdir() if p.is_file() and p.suffix.lower() in extensions]
if not archive_files:
print("No .zip, .rar, or .7z files found.")
return
print(f"Found {len(archive_files)} archive(s).\n")
for archive in sorted(archive_files):
extract_archive_to_folder(archive, base_dir)
print("Extraction process completed!")
if __name__ == "__main__":
# Usage examples:
# python extract_archives.py # current folder, non-recursive
# python extract_archives.py "/path/to/folder" # specific folder
# python extract_archives.py "/path/to/folder" --recursive
import argparse
parser = argparse.ArgumentParser(description="Extract .zip/.rar/.7z archives into separate folders.")
parser.add_argument("folder", nargs="?", default=".", help="Folder to scan (default: current directory)")
parser.add_argument("-r", "--recursive", action="store_true", help="Search subfolders recursively")
args = parser.parse_args()
main(args.folder, args.recursive)