This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: `zipfile.ZipFile` fails reading a file object in specific version(s)
Type: crash Stage:
Components: Library (Lib) Versions: Python 3.5
process
Status: closed Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: __starrify__, martin.panter
Priority: normal Keywords:

Created on 2016-02-03 08:48 by __starrify__, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (4)
msg259459 - (view) Author: __starrify__ (__starrify__) * Date: 2016-02-03 08:48
When passing a file object to `zipfile.ZipFile` for reading it fails in Python 3.5.1 it fails. While the same code in Python 2.7.11 works.
Also loading that specific file directly from file path works in Python 3.5.1.
(Please see the sample testing code below for details)

[pengyu@GLaDOS tmp]$ echo "test message" > testfile
[pengyu@GLaDOS tmp]$ zip testfile.zip testfile
updating: testfile (stored 0%)
[pengyu@GLaDOS tmp]$ file testfile.zip 
testfile.zip: Zip archive data, at least v1.0 to extract
[pengyu@GLaDOS tmp]$ python -c "a = open('testfile.zip'); import zipfile; b = zipfile.ZipFile(a, 'r')"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.5/zipfile.py", line 1026, in __init__
    self._RealGetContents()
  File "/usr/lib/python3.5/zipfile.py", line 1093, in _RealGetContents
    raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
[pengyu@GLaDOS tmp]$ python2 -c "a = open('testfile.zip'); import zipfile; b = zipfile.ZipFile(a, 'r')"
[pengyu@GLaDOS tmp]$ python -c "import zipfile; b = zipfile.ZipFile('testfile.zip', 'r')"
[pengyu@GLaDOS tmp]$ python --version
Python 3.5.1
[pengyu@GLaDOS tmp]$ python2 --version
Python 2.7.11
msg259461 - (view) Author: Martin Panter (martin.panter) * (Python committer) Date: 2016-02-03 08:56
I think you are only meant to pass in a “binary” (bytes) file object. Maybe BufferedIOBase, I’m not sure. The documentation doesn’t seem to make this very clear though. Can you suggest an improvement?

Open the file with

a = open("testfile.zip", "rb")

and all should be well :)
msg259462 - (view) Author: __starrify__ (__starrify__) * Date: 2016-02-03 09:03
Well I should have noticed that I wasn't using binary mode.. Sorry for the mistake. Closing the issue report.
msg259463 - (view) Author: __starrify__ (__starrify__) * Date: 2016-02-03 09:04
Oh yes you're right Martin. Thanks for the notice :) (I've closed this ticket before seeing your reply)
History
Date User Action Args
2022-04-11 14:58:27adminsetgithub: 70460
2016-02-03 09:04:02__starrify__setmessages: + msg259463
2016-02-03 09:03:00__starrify__setstatus: open -> closed

messages: + msg259462
2016-02-03 08:56:57martin.pantersetnosy: + martin.panter
messages: + msg259461
2016-02-03 08:48:27__starrify__create