| @ -0,0 +1,47 @@ | |||||
| 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() | |||||