Path(256 * "x").is_file() # OSError
os.path.isfile(256 * "x") # bool
Is this intended?
Does pathlib try to resemble os.path as closely as possible?
I was replacing some os.path stuff with Pathlib
Hi,
I was replacing some os.path stuff with Pathlib and I discovered this:
Path(256 * "x").is_file() # OSError
os.path.isfile(256 * "x") # bool
Is this intended? Does pathlib try to resemble os.path as closely as
possible?
On 3/8/2024 1:03 PM, Albert-Jan Roskam via Python-list wrote:
Hi,
I was replacing some os.path stuff with Pathlib and I discovered this: >> Path(256 * "x").is_file() # OSError
os.path.isfile(256 * "x") # bool
Is this intended? Does pathlib try to resemble os.path as closely as
possible?
You must have an very old version of Python. I'm running 3.12.2 and it returns False.
Traceback (most recent call last):import pathlib
pathlib.Path(256 * "x").is_file()
False
import os
os.path.isfile(256 * "x")
On 2024-03-08, Thomas Passin via Python-list <python-list@python.org> wrote:
On 3/8/2024 1:03 PM, Albert-Jan Roskam via Python-list wrote:
Hi,
I was replacing some os.path stuff with Pathlib and I discovered this: >>> Path(256 * "x").is_file() # OSError
os.path.isfile(256 * "x") # bool
Is this intended? Does pathlib try to resemble os.path as closely as >>> possible?
You must have an very old version of Python. I'm running 3.12.2 and it
returns False.
It throws OSError with Python 3.11.8 on Linux.
OSError: [Errno 36] File name too long: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Falseimport os
os.path.isfile(256 * "x")
OSError: [Errno 36] File name too long: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
On all of the Linux filesystems I know about, the max length for a
filename is 255 bytes, so the OSError is too surprising, and it does
seem to follow the documentation.
On 2024-03-08, Thomas Passin via Python-list <python-list@python.org> wrote:
On 3/8/2024 1:03 PM, Albert-Jan Roskam via Python-list wrote:
Hi,
I was replacing some os.path stuff with Pathlib and I discovered this: >>> Path(256 * "x").is_file() # OSError
os.path.isfile(256 * "x") # bool
Is this intended? Does pathlib try to resemble os.path as closely as >>> possible?
You must have an very old version of Python. I'm running 3.12.2 and it
returns False.
It throws OSError with Python 3.11.8 on Linux.
$ python
Python 3.11.8 (main, Feb 23 2024, 16:11:29) [GCC 13.2.1 20240113] on linux Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):import pathlib
pathlib.Path(256 * "x").is_file()
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.11/pathlib.py", line 1267, in is_file
return S_ISREG(self.stat().st_mode)
^^^^^^^^^^^
File "/usr/lib/python3.11/pathlib.py", line 1013, in stat
return os.stat(self, follow_symlinks=follow_symlinks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 36] File name too long: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
False
import os
os.path.isfile(256 * "x")
On Mar 8, 2024 19:35, Thomas Passin via Python-list
<python-list@python.org> wrote:
On 3/8/2024 1:03 PM, Albert-Jan Roskam via Python-list wrote:
>˙˙˙˙ Hi,
>˙˙˙˙ I was replacing some os.path stuff with Pathlib and I
discovered this:
>˙˙˙˙ Path(256 * "x").is_file()˙ # OSError
>˙˙˙˙ os.path.isfile(256 * "x")˙ # bool
>˙˙˙˙ Is this intended? Does pathlib try to resemble os.path as
closely as
>˙˙˙˙ possible?
You must have an very old version of Python.˙ I'm running 3.12.2 and it
returns False.˙ Either that or that path name exists and throws some
kind of unexpected exception.
====
Hi, I tested this with Python 3.8. Good to know that this was fixed!
Hi, I tested this with Python 3.8. Good to know that this was fixed!
We just learned a few posts back that it might be specific to Linux; I
ran it on Windows.
On 8 Mar 2024, at 23:19, Thomas Passin via Python-list <python-list@python=..org> wrote:
=20it on Windows.
We just learned a few posts back that it might be specific to Linux; I ran=
On 8 Mar 2024, at 23:19, Thomas Passin via Python-list <python-list@python.org> wrote:
We just learned a few posts back that it might be specific to Linux; I ran it on Windows.
Depending on the exact win32 api used there is a 257 limit on windows.
The 257 includes 2 for the device, C:, and 255 for the path part that will use 1 for the leading \. Getting an error for a name that is 255 is not surprising.
Other api allow for 65535 limit, not sure on its additional limits.
On Mar 10, 2024 12:59, Thomas Passin via Python-list <python-list@python.org> wrote:
On 3/10/2024 6:17 AM, Barry wrote:
>
>
>> On 8 Mar 2024, at 23:19, Thomas Passin via Python-list
<python-list@python.org> wrote:
>>
>> We just learned a few posts back that it might be specific to
Linux; I ran it on Windows.
>
> Depending on the exact win32 api used there is a 257 limit on
windows.
> The 257 includes 2 for the device, C:, and 255 for the path part
that will use 1 for the leading \. Getting an error for a name that
is 255 is not surprising.
>
> Other api allow for 65535 limit, not sure on its additional limits.
I seem to remember there is a setting to allow longer paths, but I
forget any details.
=====
You mean the "\\?\" prefix?
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
On 10 Mar 2024, at 14:49, Thomas Passin via Python-list <python-list@pytho=n.org> wrote:
=20imitation
That and there's a registry setting:
=20
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-l=
=20Yep that and rules about size of parts of the path.
Sysop: | Tetrazocine |
---|---|
Location: | Melbourne, VIC, Australia |
Users: | 6 |
Nodes: | 8 (0 / 8) |
Uptime: | 48:12:52 |
Calls: | 45 |
Files: | 21,492 |
Messages: | 63,570 |