2010-05-20 22 views
1

J'essaie d'écrire une fonction qui sauvegarde un répertoire avec des fichiers d'autorisations différentes pour une archive sur Windows XP. J'utilise le module tarfile pour taper le répertoire. Actuellement, dès que le programme rencontre un fichier qui n'a pas les autorisations de lecture, il cesse de donner l'erreur: IOError: [Errno 13] Autorisation refusée: 'chemin d'accès au fichier'. Je voudrais plutôt ignorer les fichiers qu'il ne peut pas lire plutôt que de terminer l'opération tar. Voici le code que je suis maintenant en utilisant:Obtenir tarfile python pour ignorer les fichiers sans autorisation de lecture

def compressTar(): 
"""Build and gzip the tar archive.""" 
folder = 'C:\\Documents and Settings' 
tar = tarfile.open ("C:\\WINDOWS\\Program\\archive.tar.gz", "w:gz") 

try: 
    print "Attempting to build a backup archive" 
    tar.add(folder) 
except: 
    print "Permission denied attempting to create a backup archive" 
    print "Building a limited archive conatining files with read permissions." 

    for root, dirs, files in os.walk(folder): 
    for f in files: 
    tar.add(os.path.join(root, f)) 
    for d in dirs: 
    tar.add(os.path.join(root, d)) 

Répondre

2

Vous devez ajouter instructions try:

for root, dirs, files in os.walk(folder): 
    for f in files: 
     try: 
     tar.add(os.path.join(root, f)) 
     except IOError: 
     pass 
    for d in dirs: 
     try: 
     tar.add(os.path.join(root, d), recursive=False) 
     except IOError: 
     pass 

[modifier] Comme Tarfile.add est récursive par défaut, je l'ai ajouté le paramètre recursive=False lors de l'ajout des répertoires, sinon vous pourriez rencontrer des problèmes.

1

Vous aurez besoin des mêmes try/except blocs pour lorsque vous essayez d'ajouter les fichiers avec des autorisations de lecture. À l'heure actuelle, si l'un des fichiers ou sous-répertoires ne sont pas lisibles, alors votre programme va planter.

Une autre option qui n'est pas si dépendante des blocs try consiste à vérifier les autorisations avant d'essayer d'ajouter le fichier/dossier à votre archive. Il est une question tout sur la façon de mieux faire (et quelques pièges à éviter lors de l'utilisation de Windows): Python - Test directory permissions

Le pseudo-code de base serait quelque chose comme:

if folder has read permissions: 
    add folder to tarball 
else: 
    for each item in folder: 
     if item has read permission: 
      add item to tarball 
0

Juste pour ajouter à ce que tout le monde a dit, il y a une fonction de python natif auquel vous pouvez passer le paramètre de fichier et la propriété que vous cherchez à vérifier cette propriété: hasattr('/path/to/file.txt', "read") OU hasattr('/path/to/file.txt', "write") et ainsi de suite espoir cette aide quelqu'un d'autre là-bas