2013-07-31 3 views
0

Я искал форум для такого рода ошибок, но не смог найти его, поэтому я создаю для него новый поток. Я архивирую однолетние файлы с ниже сценария python.AttributeError: объект 'TarFile' не имеет атрибута 'endswith'

import os, time, tarfile 
path = "/home/appins/.scripts/test/" 
now = time.time() 
yearago = now - 60*60*24*665 
tar_file = "nas_archive_"+time.strftime("%m-%d-%Y")+".tgz" 
tar = tarfile.open(tar_file,"w:gz") 
for root, subFolders, files in os.walk(path): 
    for file in files: 
     file = os.path.join(root,file) 
     file = os.path.join(path, file) 
     filecreation = os.path.getctime(file) 
     if filecreation > yearago: 
      tar.add(file) 
      print file," is older that one year" 
      os.remove(file) 

Он отлично работает и я могу просматривать его содержимое через. Теперь, когда я пытаюсь восстановить архивные файлы и получить ошибку AttributeError: объект «TarFile» не имеет атрибута «endswith».

Мой сценарий восстановления прост:

import os, tarfile 
archive_file = "nas_archive_07-31-2013.tgz" 
tar = tarfile.open("nas_archive_07-31-2013.tgz") 
tar.extractall(tar) 
tar.close() 

Когда я запускаю этот скрипт я получаю ниже ошибки:

python restore_archive.py 
Traceback (most recent call last): 
    File "restore_archive.py", line 8, in ? 
    tar.extractall(tar) 
    File "/usr/lib64/python2.4/tarfile.py", line 1541, in extractall 
    self.extract(tarinfo, path) 
    File "/usr/lib64/python2.4/tarfile.py", line 1578, in extract 
    self._extract_member(tarinfo, os.path.join(path, tarinfo.name)) 
    File "/usr/lib64/python2.4/posixpath.py", line 62, in join 
    elif path == '' or path.endswith('/'): 
AttributeError: 'TarFile' object has no attribute 'endswith' 

Есть что-нибудь, который я делаю неправильно в добыче? Я могу извлечь файлы, используя команду tar -xzvf.

ответ

3

Метод extractall принимает путь для извлечения. Я не уверен, почему вы передаете ему файл tar-файла; вы должны просто оставить аргумент path out и по умолчанию использовать текущий каталог.

+0

Спасибо за указание ошибки. Это была ошибка. – user2501825

1
In [96]: help(tarfile.TarFile.extractall) 

Help on function extractall in module tarfile: 

extractall(self, path='.', members=None) 
    Extract all members from the archive to the current working 
    directory and set owner, modification time and permissions on 
    directories afterwards. `path' specifies a different directory 
    to extract to. `members' is optional and must be a subset of the 
    list returned by getmembers(). 
(END) 

Так, extractall ожидает путь (str объекта) в качестве первого аргумента.

+0

Я удалил объект tar-файла из extractall и теперь работает. – user2501825

Смежные вопросы