2009-04-05 2 views
1

Пожалуйста, скажите, почему этот код не работает. Я новичок, и я не понимаю, почему мое форматирование моих аргументов zip неверно. Поскольку я не уверен, как лучше общаться, поэтому я покажу код, сообщение об ошибке и то, что, как я считаю, происходит.Python 3: правильно форматировать аргументы модуля zip (newb)

#!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.

Я использовал this site, чтобы выяснить, как использовать zipfile. zipfile - это класс, я импортирую его в начале программы, затем я использую его и его основной метод. Я передаю файл, который я хотел бы записать в zipfile.ZipFile('file to write', 'mode'), и установить программу для открытия набора объектов для записи. Затем команда записывает файл в папку назначения с таким подпоследовательным способом, "".zipfile('files to write').

Куда я иду не так?

+0

Я не знаю, какие цитаты вы удалили, а какие у вас нет; можете ли вы изменить свой пост, чтобы показать текущее состояние кода и какую ошибку вы видите сейчас? – DNS

ответ

3

Похоже, это потому, что у вас есть дополнительная пара двойных кавычек вокруг вашего пути. Удалите двойные кавычки и посмотрите, работает ли она.

+0

Правильно, мне показалось, что мне нужно передать цитируемый путь в командную строку, когда она использовала внешнюю программу. Я удалил кавычки, потому что все уже строка. Я удалил кавычки из if/else для целевой строки. Я все равно получаю примерно такую ​​же ошибку. – 2009-04-05 20:28:15

+0

Вы также попытались удалить их из исходной строки? –

1

Чтобы ответить на другой вопрос: двойные обратные косые черты там, потому что они escaped.