import sys import os import shutil import zipfile class ZipReplace: def __init__(self, filename, search_string, replace_string): self.filename = filename self.search_string = search_string self.replace_string = replace_string self.temp_directory = "unzipped-{}".format(filename) def _full_filename(self, filename): return os.path.join(self.temp_directory, filename) def zip_find_replace(self): self.unzip_files() self.find_replace() self.zip_files() def unzip_files(self): os.mkdir(self.temp_directory) zip = zipfile.ZipFile(self.filename) try: zip.extractall(self.temp_directory) finally: zip.close() def find_replace(self): for filename in os.listdir(self.temp_directory): with open(self._full_filename(filename)) as file: contents = file.read() contents = contents.replace(self.search_string, self.replace_string) with open(self._full_filename(filename), "w") as file: file.write(contents) def zip_files(self): file = zipfile.ZipFile(self.filename, "w") for filename in os.listdir(self.temp_directory): file.write(self._full_filename(filename), filename) shutil.rmtree(self.temp_directory) if __name__ == "__main__": ZipReplace(*sys.argv[1:4]).zip_find_replace()