2009-04-05 7 views
1

このコードが失敗する理由を教えてください。私は新しく、なぜ私のZIP引数の書式設定が間違っているのかわかりません。私は最良のコミュニケーション方法がわからないので、コード、エラーメッセージ、および私は何が起こっていると信じて表示されます。 zip_commandPython 3:ZIPモジュール引数を正しくフォーマットする(newb)

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つの印刷テストは、2つの文字列が正しくzipfile.ZipFile()に渡されていることを教えて割り当てられます。

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

が、私はこのエラーメッセージを受け取ります。トレースバックは私にzipfile.ZipFile()を正しく呼んでいないと伝えます。 __init__のエラーが私にこれをより確実にしてくれます。最後に、問題は、パス文字列に二重バックスラッシュを付けることになっているようです。私はIOErrorがそれを示す理由に従うことができません。

this siteを使用して、zipfileの使い方を解説しました。 zipfileはクラスで、私はプログラムの始めにそれをインポートし、次にそれをその主なメソッドとして使用します。書き込みたいファイルをzipfile.ZipFile('file to write', 'mode')に渡し、書き込み可能に設定されたオブジェクトを開くようにプログラムを設定します。次に、このコマンドは、サブフォルダとして"".zipfile('files to write')のようなサブメソッドを使用してファイルを宛先フォルダに書き込みます。

どこが間違っていますか?

+0

削除した引用符と削除していない引用符が明確ではありません。現在のコードの状態を表示するためにあなたの投稿を編集できますか?そして、今見ているエラーは何ですか? – DNS

答えて

3

パス名の前後に余分な二重引用符があるように見えます。二重引用符を削除し、それが機能するかどうかを確認してください。

+0

そうですね、外部プログラムを使用しているときに、引用符で囲まれたパスをコマンドラインに渡す必要があると思いました。すべてがすでに文字列であるため、引用符を削除しました。ターゲット文字列のif/elseから引用符を削除しました。私はまだおおよそ同じエラーを受けます。 –

+0

ソース文字列からも削除してみましたか? –

1

他の質問に答えるには:escapedであるため、二重バックスラッシュがあります。