我正在尝试将一个 zipfile(用 BZ2 压缩)解压缩到一个目录中。zipfile 包含多个文件。
所有(我已经看过很多......)示例展示了如何将 zipfile 解压缩到一个文件中。
这是我到目前为止所拥有的:
def unzipBzip2(passed_targetDir, passed_zipfile):
full_zipfile = pathlib.Path(constants.APP.ROOT, constants.DOWNLOAD_FOLDER, passed_zipfile)
full_target = pathlib.Path(constants.APP.ROOT, constants.DOWNLOAD_FOLDER, passed_targetDir)
with open(file=full_zipfile, mode="rb") as zipfile, open(full_target, 'wb') as target:
decompressor = bz2.BZ2Decompressor()
for data in iter(lambda : zipfile.read(100*1024), b''):
target.write(decompressor.decompress(data))
return
错误是:
Traceback (most recent call last):
... (stack) ...
File "/Users/bert/Project/unzipBzip2.py", line 26, in unzipBzip2
with open(file=fullzipfile, mode="rb") as zipfile, open(full_target, 'wb') as target:
IsADirectoryError: [Errno 21] Is a directory: '/Users/bert/Project/data/51fba56e-c598-491a-a5e4-57373a59367a'
嗯,“/Users/bert/Project/data/51fba56e-c598-491a-a5e4-57373a59367a”确实是一个目录。这就是应该的,因为解压缩的文件(来自 BZ2 zipfile)应该写在那个目录中。
为什么解压器会抱怨这是一个目录?
如果我将目标更改为文件
full_target = pathlib.Path(constants.APP.ROOT, constants.DOWNLOAD_FOLDER, passed_targetDir, 'x.x')
它给出了以下错误:
File "/Users/bert/Project/unzipBzip2.py", line 30, in unzipBzip2
target.write(decompressor.decompress(data))
OSError: Invalid data stream