• pathlib.Path.is_file vs os.path.isfile difference

    From Albert-Jan Roskam@21:1/5 to All on Fri Mar 8 19:03:40 2024
    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?
    Best wishes,
    Albert-Jan

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Ram@21:1/5 to Albert-Jan Roskam on Fri Mar 8 18:31:07 2024
    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!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Stefan Ram@21:1/5 to Albert-Jan Roskam on Fri Mar 8 18:19:04 2024
    Albert-Jan Roskam <sjeik_appie@hotmail.com> wrote or quoted:
    Path(256 * "x").is_file() # OSError
    os.path.isfile(256 * "x") # bool
    Is this intended?

    When something is documented and behaves accordingly,
    we assume it was intended.

    Does pathlib try to resemble os.path as closely as possible?

    No.

    The definition of "isfile" contains:

    |except (OSError, ValueError):
    | return False

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Albert-Jan Roskam via Python-list on Fri Mar 8 13:35:47 2024
    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.

    The Python docs say

    "Return True if the path points to a regular file (or a symbolic link
    pointing to a regular file), False if it points to another kind of file.

    False is also returned if the path doesn’t exist or is a broken symlink; other errors (such as permission errors) are propagated"

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Grant Edwards via Python-list on Fri Mar 8 15:06:24 2024
    On 3/8/2024 2:21 PM, Grant Edwards via Python-list wrote:
    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.

    Sorry, I should have said on Windows.


    $ 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.
    import pathlib
    pathlib.Path(256 * "x").is_file()
    Traceback (most recent call last):
    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: '
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    x'

    import os
    os.path.isfile(256 * "x")
    False


    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Lawrence D'Oliveiro@21:1/5 to Stefan Ram on Fri Mar 8 20:47:51 2024
    On 8 Mar 2024 18:31:07 GMT, Stefan Ram wrote:

    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!

    I can’t see the point of pathlib. It just seems to be trying to paper over the differences between Windows and *nix systems. Does anybody still care
    about being compatible with native-Windows any more? After all, that’s
    what WSL is for.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Albert-Jan Roskam@21:1/5 to All on Fri Mar 8 23:14:16 2024
    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!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Albert-Jan Roskam on Fri Mar 8 17:57:57 2024
    On 3/8/2024 5:14 PM, Albert-Jan Roskam wrote:


    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!

    We just learned a few posts back that it might be specific to Linux; I
    ran it on Windows.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Barry@21:1/5 to All on Sun Mar 10 10:17:45 2024
    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.

    Barry

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Barry on Sun Mar 10 07:59:44 2024
    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.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Albert-Jan Roskam@21:1/5 to All on Sun Mar 10 14:33:02 2024
    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

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Thomas Passin@21:1/5 to Albert-Jan Roskam on Sun Mar 10 10:09:53 2024
    On 3/10/2024 9:33 AM, Albert-Jan Roskam wrote:


    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

    That and there's a registry setting:

    https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Barry@21:1/5 to All on Sun Mar 10 22:09:05 2024
    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

    Yep that and rules about size of parts of the path.

    Barry

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)