[使用python中的libpath将文件从一个操作系统映射到另一个操作系统,斜杠错误

问题描述 投票:0回答:1

我有一个Python脚本,可通过API与其他程序一起使用。我需要向程序发送文件目录。我遇到的问题是,如果脚本和程序位于不同的计算机和/或操作系统上,则需要考虑路径的可能差异。如果脚本和程序在同一台计算机上,那不是问题。但是,如果它们位于不同的计算机上,则带有脚本的计算机将具有网络路径:

脚本(映射的网络驱动器):Z:\files\file.txt

程序:/mnt/user/disk1/files/file.txt

因此Z驱动器指向程序可以访问的映射的网络驱动器。

import pathlib

location = 'Z:\\files\\file.txt'
map_source = 'Z:\\'
map_destination = '/mnt/user/disk1/'
newpath=(location.replace(map_source, ''))
print(pathlib.PurePath(map_destination, newpath))

因此,如果我将脚本Z:\files\file.txt作为输入,它应从Z:\中删除location,然后将其替换为/mnt/user/disk1/,然后返回/mnt/user/disk1/files/file.txt。问题是它以错误的斜杠返回:

\mnt\user\disk1\files\file.txt

如何确定正确的斜线应该是什么?我的理解是,PurePath将根据运行脚本的OS来执行正确的斜杠,但是我可能正在Windows计算机上运行此斜杠并将路径发送到Linux计算机。我意识到我可以使用正则表达式或其他方法手动完成此操作,但是libpath或某些已经存在的模块有某种方法吗?我不能只是告诉它要转换什么,我不知道目的地将是哪个系统。我想它必须要解析并弄清楚。

python path
1个回答
0
投票

我意识到我可能可以使用正则表达式或其他方式手动完成此操作,但是libpath或某些已经存在的模块是否可以通过某种方式完成?

使用特定的PurePath子类? PurePath根据正在运行的系统在内部在pathlib.PurePosixPathpathlib.PureWindowsPath之间进行分派,但是如果您知道这是什么,则可以直接使用这些子类。

不是很有帮助,因为我认为两者之间没有真正的“桥梁”:PurePath(及其子类)可以将路径段作为输入,但是不返回路径段。

还请注意,您的Windows路径已损坏,\是非原始python字符串中的转义字符,例如\f将被解释为ASCII Formfeed (FF)

© www.soinside.com 2019 - 2024. All rights reserved.