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"'

割り当てられる前の 2 つの印刷テストzip_commandは、2 つの文字列がzipfile.ZipFile()正しく渡されていることを示しています。zipfile.ZipFile()トレースバックは、正しく呼び出していないことを示しています。のエラー__init__により、これがより確実になります。最後に、問題は、パス文字列に二重のバックスラッシュが含まれていることです。IOError がそれを示している理由を理解できません。

使い方はこちらのサイトを参考にしましたzipfilezipfileはクラスです。プログラムの開始時にインポートしてから、それとその主要なメソッドを使用します。書き込みたいファイルを渡し、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 に答える