Title: zipfile.extractall should accept bytes path as parameter
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.5
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: serhiy.storchaka Nosy List: Laurent.Mazuel, serhiy.storchaka
Priority: normal Keywords:

Created on 2014-02-27 14:43 by Laurent.Mazuel, last changed 2014-08-21 08:28 by serhiy.storchaka. This issue is now closed.

Messages (2)
msg212358 - (view) Author: Laurent Mazuel (Laurent.Mazuel) Date: 2014-02-27 14:43
Many methods which use path in Python now accept string or bytes in parameter (e.g. all methods in "os.path", the "open" method, etc.).

Actually, sometimes it is not possible to handle a file without using bytes path. For example, path coded in another encoding system than the current locale system (e.g. a Windows filename encoded in "cp1252" against a Linux "utf-8" system).

Since "zipfile.extractall" uses path, it should accept bytes as path. Currently it leads to an error:
  File "/usr/local/lib/python3.3/", line 1262, in _extract_member
    targetpath = os.path.join(targetpath, arcname)
  File "/usr/local/lib/python3.3/", line 92, in join
    "components.") from None
TypeError: Can't mix strings and bytes in path components.

This bug is closely related to bug 20329 but is not the same (but maybe this enhancement will create a good debate around bytes support in zipfile module :-) )
msg225604 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2014-08-21 08:28
See also a discussion at Python-Dev:

Looks as there are no need to add bytes path in such high-level API. In any case you can call os.fsdecode() on path argument.
Date User Action Args
2014-08-21 08:28:36serhiy.storchakasetstatus: open -> closed
resolution: rejected
messages: + msg225604

stage: needs patch -> resolved
2014-08-18 09:50:27serhiy.storchakasetassignee: serhiy.storchaka
stage: needs patch

nosy: + serhiy.storchaka
versions: + Python 3.5, - Python 3.3
2014-02-27 14:43:51Laurent.Mazuelcreate