PermissionError, когда я хочу сжать текущую папку - PullRequest
0 голосов
/ 07 ноября 2018

Я работаю над проектом 9.5 AI Sweigart «Автоматизация скучных вещей с помощью python».

Программа предназначена для резервного копирования текущей папки в ZIP-файл.

Я завершил кодирование, и оно отлично работает, когда я запускаю файл .py через Terminator.

Вот мой код:

#!/usr/bin/env python3
# backupToZip.py - backup whole folder into a ZIP file whose name increments

import zipfile, os

def backupToZip(folder):
    folder = os.path.abspath(folder) #make sure it's abspath

    # Figure out filename
    number = 1
    while True:
        zipFilename = os.path.basename(folder) + '_' + str(number) + '.zip'
        if not os.path.exists(zipFilename):
            break
        number = number + 1

    # create the ZIP file
    print('Creating %s...' % (zipFilename))
    backupZip = zipfile.ZipFile(zipFilename, 'w')

    # walk the entire folder tree and compress the files in each folder.
    for foldername, subfolders, filenames in os.walk(folder):
        print('Adding files in %s...' % (foldername))
        # add the current folder to the ZIP file
        backupZip.write(foldername)
        for filename in filenames:
            newBase = os.path.basename(folder) + '_'
            if filename.startswith(newBase) and filename.endswith('.zip'):
                continue # don't backup the backup ZIP files
            backupZip.write(os.path.join(foldername, filename))
    backupZip.close()
    print('Done')

backupToZip('.')

Тогда я бы хотел упростить использование - запустить файл, дважды щелкнув по нему.

Затем я изменил имя файла с backupToZip.py на backupToZip.py.command. Авторизовал файл с помощью 'chmod + x backupToZip.py.command' в Терминаторе.

Затем я попытался дважды щелкнуть файл, но появляется сообщение об ошибке:

Last login: Wed Nov  7 22:33:19 on ttys001
huxiaorendeMacBook-Pro-2:~ huxiaoren$ /Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command ; exit;
Creating huxiaoren_5.zip...
Adding files in /Users/huxiaoren...
Traceback (most recent call last):
  File "/Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command", line 34, in <module>
    backupToZip('.')
  File "/Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command", line 30, in backupToZip
    backupZip.write(os.path.join(foldername, filename))
  File "/Users/huxiaoren/miniconda3/lib/python3.7/zipfile.py", line 1721, in write
    with open(filename, "rb") as src, self.open(zinfo, 'w') as dest:
PermissionError: [Errno 13] Permission denied: '/Users/huxiaoren/.rnd'
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

Я понял, что, возможно, программа не может распознать текущий путь к папке с помощью '.'. Затем я изменяю последнюю строку кода с:

backupToZip('.')

до:

folder = os.getcwd()
backupToZip(folder)

Снова всплывает ошибка разрешения:

Last login: Wed Nov  7 22:35:55 on ttys001
huxiaorendeMacBook-Pro-2:~ huxiaoren$ /Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command ; exit;
Creating huxiaoren_7.zip...
Adding files in /Users/huxiaoren...
Traceback (most recent call last):
  File "/Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command", line 35, in <module>
    backupToZip(folder)
  File "/Users/huxiaoren/python/automate/project_9.5_backupToZip/backupToZip.py.command", line 30, in backupToZip
    backupZip.write(os.path.join(foldername, filename))
  File "/Users/huxiaoren/miniconda3/lib/python3.7/zipfile.py", line 1721, in write
    with open(filename, "rb") as src, self.open(zinfo, 'w') as dest:
PermissionError: [Errno 13] Permission denied: '/Users/huxiaoren/.rnd'
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

Как я могу выяснить, где проблема?

...