1

请告诉我为什么此代码失败。我是新手,我不明白为什么我的 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').

我哪里错了?

4

2 回答 2

3

看起来这是因为您的路径名周围有一对额外的双引号。去掉双引号,看看是否有效。

于 2009-04-05T19:21:44.150 回答
1

回答你的另一个问题:双反斜杠在那里是因为它们被转义了

于 2009-04-05T19:24:31.163 回答