Получить python tarfile для пропуска файлов без разрешения на чтение - PullRequest
1 голос
/ 20 мая 2010

Я пытаюсь написать функцию, которая создает резервную копию каталога с файлами с разным разрешением для архива в Windows XP. Я использую модуль tarfile для tar-каталога. В настоящее время, как только программа обнаруживает файл, не имеющий разрешений на чтение, она перестает выдавать ошибку: IOError: [Errno 13] В доступе отказано: «путь к файлу». Я хотел бы вместо этого просто пропустить файлы, которые он не может прочитать, а не завершить операцию tar. Это код, который я использую сейчас:

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))

Ответы [ 3 ]

2 голосов
/ 20 мая 2010

Вы должны добавить больше операторов 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

[edit] Так как Tarfile.add по умолчанию рекурсивен, я добавил параметр recursive=False при добавлении каталогов, иначе вы можете столкнуться с проблемами.

1 голос
/ 20 мая 2010

Вам понадобятся те же самые блоки try / except, когда вы пытаетесь добавить файлы с разрешениями на чтение. Прямо сейчас, если какие-либо файлы или подкаталоги недоступны для чтения, ваша программа будет аварийно завершена.

Другой вариант, который не так зависит от блоков try, - это проверить разрешения перед тем, как пытаться добавить файл / папку в ваш tarball. Существует целый вопрос о том, как лучше всего это сделать (и некоторые подводные камни, которых следует избегать при использовании Windows): Python - Проверка прав доступа к каталогу

Базовый псевдокод будет выглядеть примерно так:

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 голосов
/ 11 октября 2012

Просто добавьте к тому, что сказали все остальные, есть встроенная функция python, в которую можно передать параметр файла и свойство, которое вы ищете для проверки этого свойства: hasattr('/path/to/file.txt', "read") ИЛИ hasattr('/path/to/file.txt', "write") и т. Д. надеюсь, это поможет кому-то еще

...