import zipfile import glob 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) 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')