From b0a6f0240faf918681f8f8efa112d32e7fc2d75d Mon Sep 17 00:00:00 2001 From: tmeissner Date: Wed, 24 Sep 2014 00:07:13 +0200 Subject: [PATCH] refactoring of zipsearch.py by using inhiterance --- python_3_oop/chapter05/zipprocessor.py | 32 ++++++++++++++++++++++++++ python_3_oop/chapter05/zipreplace.py | 24 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 python_3_oop/chapter05/zipprocessor.py create mode 100644 python_3_oop/chapter05/zipreplace.py diff --git a/python_3_oop/chapter05/zipprocessor.py b/python_3_oop/chapter05/zipprocessor.py new file mode 100644 index 0000000..940488c --- /dev/null +++ b/python_3_oop/chapter05/zipprocessor.py @@ -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) diff --git a/python_3_oop/chapter05/zipreplace.py b/python_3_oop/chapter05/zipreplace.py new file mode 100644 index 0000000..92a0526 --- /dev/null +++ b/python_3_oop/chapter05/zipreplace.py @@ -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()