text: import argparse
  import os
  
  import shutil
  from zipfile import ZipFile
  
  from tqdm import tqdm
  
  
  def get_args():
      parser = argparse.ArgumentParser()
      parser.add_argument('paths', nargs='+')
      parser.add_argument('-o', '--out', default='save.zip')
      args = parser.parse_args()
      return args
  
  
  def zip_save(args):
      temp_dir = "."
      save_dir = os.path.join(temp_dir, "save")
      if not os.path.exists(save_dir):
          os.makedirs(save_dir)
      for save_source_path in tqdm(args.paths):
          # path = "out/basic/30/save/basic-18000"
          # target_path = "save_dir/30/save"
          # also output full path name to "save_dir/30/readme.txt
          # need to also extract "out/basic/30/shared.json"
          temp, _ = os.path.split(save_source_path)  # "out/basic/30/save", _
          model_dir, _ = os.path.split(temp)  # "out/basic/30, _
          _, model_name = os.path.split(model_dir)
          cur_dir = os.path.join(save_dir, model_name)
          if not os.path.exists(cur_dir):
              os.makedirs(cur_dir)
          save_target_path = os.path.join(cur_dir, "save")
          shared_target_path = os.path.join(cur_dir, "shared.json")
          readme_path = os.path.join(cur_dir, "readme.txt")
          shared_source_path = os.path.join(model_dir, "shared.json")
          shutil.copy(save_source_path, save_target_path)
          shutil.copy(shared_source_path, shared_target_path)
          with open(readme_path, 'w') as fh:
              fh.write(save_source_path)
  
      os.system("zip {} -r {}".format(args.out, save_dir))
  
  def main():
      args = get_args()
      zip_save(args)
  
  if __name__ == "__main__":
      main()
  