Joh*_*ohn 7 python python-3.x pathlib
我正在用 Python3 编写一些软件,旨在备份 Windows 客户端上的目录结构,并将其发送到 Linux 服务器。
我遇到的问题是如何处理 Windows 和 Linux 文件路径。我需要 Windows 客户端创建一个表示源文件的相对路径的对象,将该相对路径发送到服务器,以便服务器知道将文件写入目标文件夹中的哪个子目录,然后发送实际数据。
发送实际数据不是问题,但是如何发送 Windows 相对路径到 Linux 系统?我尝试将其作为字符串使用os.path,但很快就变得一团糟。我正在考虑使用pathlib.
如果我可以创建某种路径对象,我可以使用 pickle 来序列化它,并将其发送到服务器。我将使用 pathlib 中的什么对象来表示路径?
Path()似乎创建了一个适用于当前文件系统(PosixPath或WindowsPath)的类的实例,这些文件系统不可移植。如果我WindowsPath在 Windows 客户端上创建一个对象,Linux 将无法反序列化它,因为您甚至无法WindowsPath在 Linux 系统上实例化一个对象。
看起来我可以使用一个PureWindowsPath对象,然后将其发送到 Linux,但是如何将PureWindowsPath对象(表示相对路径)转换为 aPosixPath或至少 a PurePosixPath?
那可能吗?还是我想的全错了?
Mar*_*ers 10
pathlib是一个面向对象的库,而不是一个通信协议。只需发送字符串。
Windows可以处理与斜线的路径就好了,两者pathlib并os.path能为你正常化这样的路径。您可能希望规范化协议中的路径以使用 POSIX 路径分隔符(正斜杠)。
您可以使用 将相对 Windows 路径转换为 POSIX 路径pathlib.PurePosixPath(),例如:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
如果您的服务器使用 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')
Run Code Online (Sandbox Code Playgroud)
如果您将路径保留为字符串,那么您可以str.replace(os.altsep, os.sep)在发送之前使用在 Windows 端实现相同的功能:
>>> import os
>>> p = 'relative\path\on\windows'
>>> p.replace(os.altsep, os.sep)
'relative/path/on/windows'
Run Code Online (Sandbox Code Playgroud)
你总是可以relative_path.replace('\\', os.sep)用来强制问题。
| 归档时间: |
|
| 查看次数: |
6499 次 |
| 最近记录: |