Learning by doing: Reading books and trying to understand the (code) examples
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

62 lines
1.7 KiB

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)
class ZipProcessorComp:
def __init__(self, zipname, processor):
self.zipname = zipname
self.temp_directory = "unzipped-{}".format(zipname[:-4])
self.processor = processor
def _full_filename(self, filename):
return os.path.join(self.temp_directory, filename)
def process_zip(self):
self.unzip_files()
self.processor.process(self)
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)