Python-Sicherungsdatei

巴扎黑
Freigeben: 2016-12-09 09:48:49
Original
1321 Leute haben es durchsucht

Aufgabe:

Sie möchten geänderte Dateien in einem bestimmten Verzeichnisbaum mehrmals sichern, um zu verhindern, dass eine bestimmte Änderung versehentlich Ihre Bearbeitungsergebnisse löscht. Führen Sie regelmäßig das folgende Python-Skript aus, um Dateien im angegebenen Verzeichnis zu sichern.

#-*- coding:utf-8 -*-
import sys,os,shutil,filecmp
MAXVERSIONS = 100
def backup(tree_top, bakdir_name="bakdir"):
for dir,subdirs,files in os.walk(tree_top):
#确保每个目录都有一个备份目录
backup_dir = os.path.join(dir,bakdir_name)
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
#停止对备份目录的递归
subdirs[:] = [d for d in subdirs if d != bakdir_name]
for file in files:
filepath = os.path.join(dir,file)
destpath = os.path.join(backup_dir,file)
#检查以前的版本是否存在
for index in xrange(MAXVERSIONS):
backfile = '%s.%2.2d' % (destpath, index)
if not os.path.exists(backfile):
break
if index > 0:
old_backup = '%s.%2.2d' % (destpath,index-1)
abspath = os.path.abspath(filepath)
try:
if os.path.isfile(old_backup) and filecmp.cmp(abspath, old_backup,shallow=False):
continue
except OSError:
pass
try:
shutil.copy(filepath,backfile)
except OSError:
pass
if __name__ == '__main__':
try:
tree_top = sys.argv[1]
except IndexError:
tree_top = '.'
backup(tree_top)
Nach dem Login kopieren

Wenn Sie Dateien mit einem bestimmten Suffix sichern möchten (oder Dateien mit Ausnahme einer bestimmten Erweiterung sichern möchten); fügen Sie einen entsprechenden Test in der Datei-in-Dateien-Schleife hinzu:

for file in files:
    name,ext = os.path.splitext(file)
    if ext not in ('.py','.txt','.doc'):
        continue
Nach dem Login kopieren

Achten Sie auf den folgenden Code, um zu vermeiden, dass os.walk in das zu sichernde Unterverzeichnis rekursiert. Wenn die os.walk-Iteration beginnt, iteriert os.walk Unterverzeichnisse basierend auf Unterverzeichnissen. Dieses Detail zu os.walk ist auch ein hervorragendes Beispiel für die Verwendung von Generatoren und zeigt, wie Generatoren Informationen aus iterativem Code erhalten und wie sie sich wiederum auf die Iteration auswirken.

subdirs[:] = [d for d in subdirs if d != bakdir_name]
Nach dem Login kopieren


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage