代码改变世界

020: class, objects and instance: 一个简单的例子,压缩文件中内容的替换

2016-01-27 22:20  Miles.Yao  阅读(215)  评论(0编辑  收藏  举报

这个例子是对前面学习的知道的一个简单总结。

在设计类的时候,并非所有的类都是埋头干活的类,同时也需要有很多类似于管理的类,这样的类的功能就是调用其他的类来共同的完成任务。

import sys
import os
import shutil
import zipfile

class ZipReplace(object):
    def __init__(self, file_name, search_string, replace_string):
        self.file_name = file_name
        self.search_string = search_string
        self.replace_string = replace_string
        self.temp_directory = "unzipped-{}".format(file_name)

    def __full_filename(self, file_name):
        return os.path.join(self.temp_directory, file_name)
    
    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.file_name)
        try:
            zip.extractall(self.temp_directory)
        finally:
            zip.close()

    def find_replace(self):
        for file_name in os.listdir(self.temp_directory):
            with open(self.__full_filename(file_name)) as file:
                contents = file.read()

            contents = contents.replace(self.search_string, self.replace_string)

            with open(self.__full_filename(file_name), 'w') as file:
                file.write(contents)

    def zip_files(self):
        file = zipfile.ZipFile(self.file_name, 'w')

        for file_name in os.listdir(self.temp_directory):
            file.write(self.__full_filename(file_name), file_name)
        
        shutil.rmtree(self.temp_directory)    

zr = ZipReplace("test.zip", 'hello', 'hello world...')    
zr.zip_find_replace()