I was replacing some os.path stuff with Pathlib
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?
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 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.
$ pythonxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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: '
False
import os
os.path.isfile(256 * "x")
Albert-Jan Roskam <sjeik_appie@hotmail.com> wrote or quoted:
I was replacing some os.path stuff with Pathlib
Don't try to fix it if it ain't broke!
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!
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.
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@python.org> wrote:
That and there's a registry setting:
https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 546 |
Nodes: | 16 (2 / 14) |
Uptime: | 16:51:59 |
Calls: | 10,389 |
Files: | 14,061 |
Messages: | 6,416,944 |