gpt4 book ai didi

python - Python3 的 pathlib 可以在 Linux 和 Windows 系统之间移植使用吗?

转载 作者:行者123 更新时间:2023-12-03 19:45:29 25 4
gpt4 key购买 nike

我正在用 Python3 编写一些软件,旨在备份 Windows 客户端上的目录结构,并将其发送到 Linux 服务器。

我遇到的问题是如何处理 Windows 和 Linux 文件路径。我需要 Windows 客户端创建一个表示源文件相对路径的对象,将该相对路径发送到服务器,以便服务器知道将文件写入目标文件夹中的哪个子目录,然后发送实际数据。

发送实际数据不是问题,但是如何将 Windows 相对路径发送到 Linux 系统?我尝试将其作为字符串使用 os.path ,但很快就变得一团糟。我正在考虑使用 pathlib .

如果我可以创建某种路径对象,我可以使用 pickle 对其进行序列化,并将其发送到服务器。我会使用 pathlib 中的什么对象来表示路径?
Path()似乎创建了一个适用于当前文件系统( PosixPathWindowsPath )的类的实例,它们不可移植。如果我制作 WindowsPath Windows 客户端上的对象,Linux 将无法反序列化它,因为您甚至无法实例化 WindowsPath Linux 系统上的对象。

看起来我可以使用 PureWindowsPath对象,并将其发送到 Linux,但是如何转换 PureWindowsPath指向 PosixPath 的对象(表示相对路径) ,或至少一个 PurePosixPath ?

那可能吗?还是我认为这一切都错了?

最佳答案

pathlib是 OO 库,而不是通信协议(protocol)。只需发送字符串。

Windows 可以很好地处理带有正斜杠的路径,pathlibos.path可以为您规范此类路径。您可能希望规范化协议(protocol)中的路径以使用 POSIX 路径分隔符(正斜杠)。

您可以使用 pathlib.PurePosixPath() 将相对 Windows 路径转换为 ​​POSIX 路径。 , 例如:

>>> from pathlib import Path, PurePosixPath
>>> Path('relative\path\on\windows')
WindowsPath('relative\path\on\windows')
>>> PurePosixPath(_)
PurePosixPath('relative/path/on/windows')
>>> str(_)
'relative/path/on/windows'

如果您的服务器使用 Windows 约定接收相对路径,请使用 PureWindowsPath()将其转换为 pathlib对象,然后将其传递给 Path()转换:
>>> from pathlib import Path, PureWindowsPath
>>> received = 'relative\path\on\windows'
>>> PureWindowsPath(received)
PureWindowsPath('relative/path/on/windows')
>>> Path(_)
PosixPath('relative/path/on/windows')

如果将路径保留为字符串,则可以使用 str.replace(os.altsep, os.sep)在发送之前在 Windows 端实现相同的效果:
>>> import os
>>> p = 'relative\path\on\windows'
>>> p.replace(os.altsep, os.sep)
'relative/path/on/windows'

你总是可以使用 relative_path.replace('\\', os.sep)强行解决问题。

关于python - Python3 的 pathlib 可以在 Linux 和 Windows 系统之间移植使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53997726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com