2017-11-06 8 views
1

現在、私はzipファイルからファイルを抽出するpythonスクリプトを書いています。このため私はZipFileモジュールを使用しています。すべてがファイルのために素晴らしい作品ですが、私は名前にスペースを含むフォルダに問題があります。名前にスペースを入れたzipファイルのPython抽出フォルダ

私のzipファイルには、以下の構造を有している。

Test.zip 
- foo/test.txt 
- foo bar/test.txt 

は、ファイルを抽出するために私のコードは次のようになります。

currentFile = ZipFile(zipFilePath, 'r') 

currentFile.extractall(path, 'foo/') 
currentFile.extractall(path, 'foo bar/') 

しかし、2回目の呼び出しは次のエラーを生成します。

KeyError: "There is no item named 'b' in the archive"

私はこれがバーの 'b'につながったと思う。だから、2番目の呼び出しがうまくいかない理由や、フォルダ名の空白文字をエスケープしてそれを抽出する方法がありますか?

答えて

1

エラーが見つかりました。リストに戻るリストreferesの

ZipFile.extractall([path[, members[, pwd]]])

Extract all members from the archive to the current working directory. path specifies a different directory to extract to. members is optional and must be a subset of the list returned by namelist(). pwd is the password used for encrypted files.

サブセット:documentationから。だから私は試しました:

currentFile.extractall(path, ['foo bar/']) 

それは素晴らしい仕事をしました。それが誰かを助けることを願っています。 extractメソッドと比較してパスとメンバーが逆になっていることにも注意してください。

0

単一引用符ではなくr "文字列"でパスをラップしてみてください。テストされていない - ちょうどメモリから行く。

currentFile.extractall(r"foo bar/", path) 
0

あなたは、アレイ内のパスを渡すことがあります。

currentFile.extractall(path, ['foo bar/']) 
+0

が働いていた、このいただきありがとうございます。しかし、今私は新しい問題があります: 'namelist()'メソッドは私のディレクトリをリストしません。それのための任意のアイデア? – Cilenco

関連する問題