Пожалуйста, скажите мне, почему этот код не работает. Я новичок и не понимаю, почему мое форматирование моих zip-аргументов неверно. Поскольку я не уверен, как лучше общаться, я покажу код, сообщение об ошибке и то, что, по моему мнению, происходит.
#!c:\python30
# Filename: backup_ver5.py
import os
import time
import zipfile
source = r'"C:\Documents and Settings\Benjamin Serrato\My Documents\python\backup_list"'
target_dir = r'C:\Documents and Settings\Benjamin Serrato\My Documents\python\backup_dir'
today = target_dir + os.sep + time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')
comment = input('Enter a comment --> ')
if len(comment) == 0:
target = '"' + today + os.sep + now + '.zip' + '"'
else:
target = '"' + today + os.sep + now + '_' + \
comment.replace(' ', '_') + '.zip' + '"'
if not os.path.exists(today):
os.mkdir(today)
print('Successfully created directory', today)
print(target)
print(source)
zip_command = zipfile.ZipFile(target, 'w').write(source)
if os.system(zip_command) == 0:
print('Successful backup to', target)
else:
print('Backup FAILED')
enter code here
Я получаю это сообщение об ошибке:
Enter a comment -->
"C:\Documents and Settings\Benjamin Serrato\My Documents\python\backup_dir\20090
405\134614.zip"
"C:\Documents and Settings\Benjamin Serrato\My Documents\python\backup_list"
Traceback (most recent call last):
File "C:\Documents and Settings\Benjamin Serrato\My Documents\python\backup_ve
r5.py", line 32, in <module>
zip_command = zipfile.ZipFile(target, 'w').write(source)
File "c:\python30\lib\zipfile.py", line 683, in __init__
self.fp = io.open(file, modeDict[mode])
File "C:\Python30\lib\io.py", line 222, in open
closefd)
File "C:\Python30\lib\io.py", line 615, in __init__
_fileio._FileIO.__init__(self, name, mode, closefd)
IOError: [Errno 22] Invalid argument: '"C:\\Documents and Settings\\Benjamin Ser
rato\\My Documents\\python\\backup_dir\\20090405\\134614.zip"'
Два теста печати перед назначением zip_command
говорят мне, что две строки правильно передаются в zipfile.ZipFile()
. В трассировке говорится, что я не правильно звоню zipfile.ZipFile()
. Ошибка в __init__
делает меня более уверенным в этом. Наконец, проблема заключается в том, что моя строка пути имеет двойной обратный слеш. Я не могу понять, почему IOError показывает это.
Я использовал этот сайт , чтобы понять, как использовать zipfile
. zipfile
- это класс, я импортирую его в начале программы, затем использую его и его основной метод. Я передаю файл, который я хочу записать, в zipfile.ZipFile('file to write', 'mode')
и настраиваю программу на открытие объекта, доступного для записи. Затем команда записывает файл в папку назначения с помощью под-метода, например, "".zipfile('files to write')
.
Куда я иду не так?