| @ -0,0 +1,32 @@ | |||||
| import os | |||||
| import shutil | |||||
| import zipfile | |||||
| class ZipProcessor: | |||||
| def __init__(self, zipname): | |||||
| self.zipname = zipname | |||||
| self.temp_directory = "unzipped-{}".format(self.zipname[:-4]) | |||||
| def _full_filename(self, filename): | |||||
| return os.path.join(self.temp_directory, filename) | |||||
| def process_zip(self): | |||||
| self.unzip_files() | |||||
| self.process_files() | |||||
| self.zip_files() | |||||
| def unzip_files(self): | |||||
| os.mkdir(self.temp_directory) | |||||
| zip = zipfile.ZipFile(self.zipname) | |||||
| try: | |||||
| zip.extractall(self.temp_directory) | |||||
| finally: | |||||
| zip.close() | |||||
| def zip_files(self): | |||||
| file = zipfile.ZipFile(self.zipname, "w") | |||||
| for filename in os.listdir(self.temp_directory): | |||||
| file.write(self._full_filename(filename), filename) | |||||
| shutil.rmtree(self.temp_directory) | |||||
| @ -0,0 +1,24 @@ | |||||
| from zipprocessor import ZipProcessor | |||||
| import sys | |||||
| import os | |||||
| class ZipReplace(ZipProcessor): | |||||
| def __init__(self, filename, search_string, replace_string): | |||||
| super().__init__(filename) | |||||
| self.search_string = search_string | |||||
| self.replace_string = replace_string | |||||
| def process_files(self): | |||||
| '''perform a search and replace on all files in the temporrary | |||||
| directory''' | |||||
| 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) | |||||
| if __name__ == "__main__": | |||||
| ZipReplace(*sys.argv[1:4]).process_zip() | |||||