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()
|