Ryan Wilson added the comment:
The reason behind this was that zipfile.py currently handles empty directories
in zipfiles incorrectly.
On lines 1774 - 1778 in Lib/zipfile.py:
tgtdir = os.path.dirname(tgt)
if not os.path.exists(tgtdir):
os.makedirs(tgtdir)
with open(tgt, 'wb') as fp:
fp.write(zf.read(path))
In the case described above, tgt is 'dest/foo/' because the directory is empty.
For non-empty directories, tgt would be a file in the directory i.e.
'dest/foo/a'. In the empty directory case, the directory will be created, but
then opened as file (which will throw the error shown above).
When compressing the file with 'python -mzipfile -c', zipfile.py would not add
empty directories to the zipfile. Hence, the zip file generated is empty.
This patch fixes both issues. In the decompression case, I utilize the
Zipfile.extractall() function instead of extracting each file manually. The
extractall() function handles empty directories correctly. For the compression
case, I added a check to add an empty directory to the zip file.
--
keywords: +patch
nosy: +ryantimwilson
versions: -Python 3.5
Added file: http://bugs.python.org/file36389/fix_zipfile_empty_dir.patch
___
Python tracker
<http://bugs.python.org/issue22201>
___
___
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com