Re: [Python-Dev] [Python-3000] New proposition for Python3 bytes filename issue
On Tue, Sep 30, 2008 at 12:42 PM, Terry Reedy <tjreedy@udel.edu> wrote:
Guido van Rossum wrote:
On Tue, Sep 30, 2008 at 11:13 AM, Georg Brandl <g.brandl@gmx.net> wrote:
Victor Stinner schrieb:
On Windows, we might reject bytes filenames for all file operations: open(), unlink(), os.path.join(), etc. (raise a TypeError or UnicodeError)
Since I've seen no objections to this yet: please no. If we offer a "lower-level" bytes filename API, it should work for all platforms.
I'm not sure either way. I've heard it claim that Windows filesystem APIs use Unicode natively. Does Python 3.0 on Windows currently support filenames expressed as bytes? Are they encoded first before passing to the Unicode APIs? Using what encoding?
In 3.0rc1, the listdir doc needs updating: "os.listdir(path) Return a list containing the names of the entries in the directory. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. Availability: Unix, Windows.
On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects."
s/Unicode/bytes/ at least for Windows.
os.listdir(b'.') [b'countries.txt', b'multeetest.py', b't1.py', b't1.pyc', b't2.py', b'tem', b'temp.py', b'temp.pyc', b'temp2.py', b'temp3.py', b'temp4.py', b'test.py', b'z', b'z.txt']
The bytes names do not work however:
t=open(b'tem') Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> t=open(b'tem') File "C:\Programs\Python30\lib\io.py", line 284, in __new__ return open(*args, **kwargs) File "C:\Programs\Python30\lib\io.py", line 184, in open raise TypeError("invalid file: %r" % file) TypeError: invalid file: b'tem'
Is this what you were asking?
No, that's because bytes is missing from the explicit list of allowable types in io.open. Victor has a one-line trivial patch for this. Could you try this though?
import _fileio _fileio._FileIO(b'tem')
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
Guido van Rossum wrote:
No, that's because bytes is missing from the explicit list of allowable types in io.open. Victor has a one-line trivial patch for this. Could you try this though?
import _fileio _fileio._FileIO(b'tem')
import _fileio _fileio._FileIO(b'tem') _fileio._FileIO(3, 'r')
participants (2)
-
Guido van Rossum
-
Terry Reedy