Python 3: правильное форматирование аргументов zip-модуля (новичок) - PullRequest
1 голос
/ 05 апреля 2009

Пожалуйста, скажите мне, почему этот код не работает. Я новичок и не понимаю, почему мое форматирование моих 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').

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

Ответы [ 2 ]

3 голосов
/ 05 апреля 2009

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

1 голос
/ 05 апреля 2009

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

...