def backup(self, snd_dir, prefix=''): ''' バックアップの作成 @param prefix 保存名の頭につける文字列 ''' try: zip_path, name = self._get_backup_path(snd_dir, prefix) zf = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) # ---- info.txt の作成 conf = SafeConfigParser() conf.add_section('info') conf.set('info', 'name', name.encode('CP932')) sf = StringIO() conf.write(sf) LABELS_DIR = 'labels' info_path = os.path.join(LABELS_DIR, INFO_FILE) zf.writestr(info_path, sf.getvalue()) labels_paths = mf.get_labels_paths(snd_dir, False) snd_files = mf.get_snd_files(snd_dir) num_snds = len(snd_files) max_labels_file = mf.get_labels_file(num_snds) # ---- ラベルファイルの作成 for labels_path in labels_paths: labels_file = os.path.basename(labels_path) if labels_file > max_labels_file: break dst = os.path.join(LABELS_DIR, labels_file) zf.write(labels_path, dst) zf.close() except Exception as e: print str(e) return None info = self._load_labels_info_from_zip(zip_path) self.append(info) return info
def restore(self, snd_dir, info): ''' バックアップの復元 ''' try: labels_dir = mf.get_labels_dir(snd_dir) self._remove_all_files(labels_dir) snd_files = mf.get_snd_files(snd_dir) num_snds = len(snd_files) max_labels_file = mf.get_labels_file(num_snds) for i, (labels_file, labels) in enumerate(info.labels_list): if labels_file <= max_labels_file: labels_path = os.path.join(labels_dir, labels_file) labels.write(labels_path) except Exception as e: print str(e)