2017-07-27 14 views
0

次のコードを使用して、ルートフォルダ内のすべてのzipフォルダを解凍しようとしています。このコードは、このスレッド上で見つかった:なぜzipfileはxlsxファイルを解凍しようとしていますか?

Traceback (most recent call last): 
    File "//rootdir/myfolder/Python code/unzip_helper.py", line 29, in <module> 
    zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 
    File "//rootdir/myfolder/Python\Python36-32\lib\zipfile.py", line 1491, in extractall 
    self.extract(zipinfo, path, pwd) 
    File "//myaccount/Local\Programs\Python\Python36-32\lib\zipfile.py", line 1479, in extract 
    return self._extract_member(member, path, pwd) 
    File "//myaccount/Local\Programs\Python\Python36-32\lib\zipfile.py", line 1542, in _extract_member 
    open(targetpath, "wb") as target: 

FileNotFoundError: [Errno 2] No such file or directory: '\\rootdir\myfolder\._SGS Naked 3 01 WS Kappa Coated and a very long very long file name could this be a problem i dont think so.xlsx' 

私の質問は、なぜだろう:

Unzip zip files in folders and subfolders with python

rootPath = u"//rootdir/myfolder" # CHOOSE ROOT FOLDER HERE 
pattern = '*.zip' 
for root, dirs, files in os.walk(rootPath): 
    for filename in fnmatch.filter(files, pattern): 
     print(os.path.join(root, filename)) 
     zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 

は、しかし、私はFileNotFoundErrorはXLSXファイルが存在しないと言って言って、このエラーを取得しておきますそれはこのExcelファイルを解凍したいと思っています。

エラーを取り除くにはどうすればよいですか?

私はまた、ROOTPATHのための代わりのuのRを使用して試してみた:

rootPath = r"//rootdir/myfolder" 

と私は同じエラーを取得します。

本当にありがとうございます。 Windowsのファイル名は、Unix上のドットを持つことができるとは異なり

+0

私は 'os.path.join(root、os.path.splitext(filename)[0])が原因だと思います。 – direprobs

+0

それはどういう意味ですか?他のzipフォルダでも動作します。それは約20のzipフォルダを正常に解凍しました – alwaysaskingquestions

+0

エラーは、そのようなファイルやディレクトリがないことを明示的に述べています。言い換えれば、 '.xlsx'ファイルを解凍しようとしているのではなく、解凍するディレクトリがないと不平を言っています。いくつかのアーカイブを正常に解凍したとしても、これは 'os.path.join(root、os.path.splitext(filename)[0])'がアーカイブを常に解凍するための有効なパスを与えることを保証するものではありません。 – direprobs

答えて

1

いくつかのファイル名およびディレクトリ名は、結果として、その名前の最後の行を余分ドットを持っていることがあります。

zipfile.ZipFile(os.path.join(root, filename)).extractall(os.path.join(root, os.path.splitext(filename)[0])) 

この行が失敗しました。それが起こるかを確認するには:

>>> filename = "my.arch.zip" 
>>> root = "/my/path/to/mydir/" 
>>> os.path.join(root, os.path.splitext(filename)[0]) 
'/my/path/to/mydir/my.arch' 

をしてたり、余分なドットなし、問題はまだあなたのコード内で行われます:何'/my/path.to/mydir/arch'が見つからない場合は、FileNotFoundError

>>> os.path.join(root, os.path.splitext(filename)[0]) 
'/my/path.to/mydir/arch' 

を発生しますが。私はあなたが明示的にパスすることをお勧めします。そうでなければ、それらのディレクトリの存在を保証する必要があります。

ZipFile.extractall(path=None, members=None, pwd=None)

現在の作業ディレクトリにアーカイブからすべてのメンバーを抽出します。 pathpathが存在しないディレクトリでない限り、FileNotFoundErrorが発生します

...に抽出するために別のディレクトリを指定します。

+0

こんにちはDireprobs、お手伝いをしようとしています。 robyschekが正しいと分かりました。それは長いファイル名のためでした:( – alwaysaskingquestions

+0

@alwaysaskingquestionsよろしくお願いします! – direprobs

関連する問題