import os import zstandard as zstd def unpack_zst(input_file, output_file=None): """ Unpacks a .zst file using the Zstandard library. Args: input_file (str): Path to the input .zst file. output_file (str): Path to the output file. If None, the output file will have the same name as the input file but without the .zst extension. Returns: str: Path to the decompressed file. """ if not input_file.endswith('.zst'): raise ValueError("Input file must have a .zst extension") if output_file is None: output_file = input_file.rsplit('.zst', 1)[0] try: with open(input_file, 'rb') as compressed_file: dctx = zstd.ZstdDecompressor() with open(output_file, 'wb') as decompressed_file: dctx.copy_stream(compressed_file, decompressed_file) print(f"Decompressed '{input_file}' to '{output_file}'") return output_file except Exception as e: print(f"Failed to decompress '{input_file}': {e}") raise if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Unpack a .zst file") parser.add_argument("input_file", help="Path to the .zst file") parser.add_argument( "-o", "--output_file", help="Path to the output file (default: same name as input without .zst)" ) args = parser.parse_args() try: unpack_zst(args.input_file, args.output_file) except Exception as e: print(f"Error: {e}")