import glob import zipfile from os import path class zip_backup: root_dir = "" ignore = [] backup_list = [] def ignore_list(self): gitignore = self.root_dir + "\\.gitignore" if not path.exists(gitignore): pass with open(gitignore, "r") as f: for line in f.readlines(): line = line.strip().replace("/", "\\").lower() if line[:1] == "*": if line[-1] == "*": line = line[1:-1] else: line = line[1:] + "\\" else: line = "\\" + line + "\\" self.ignore.append(line) def ignored(self, filename): rel_filename = "\\" + filename.replace(self.root_dir, "").lower() + "\\" for e in self.ignore: if e in rel_filename: return True return False def check_dir(self, current_dir): if self.root_dir == "": self.root_dir = current_dir self.ignore_list() for entry in glob.glob(current_dir + "\\*"): if path.isdir(entry): self.check_dir(entry) elif not self.ignored(entry): self.backup_list.append(entry) def zip_to_file(self, zip_file): with zipfile.ZipFile(zip_file, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zip: for e in self.backup_list: zip.write(e) if __name__ == "__main__": z_backup = zip_backup() z_backup.check_dir("C:\\GAPS_Autosys") # print(backup_list[:10]) z_backup.zip_to_file("C:\\GAPS_Autosys\\Test.zip")