我有一个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
或某些已经存在的模块有某种方法吗?我不能只是告诉它要转换什么,我不知道目的地将是哪个系统。我想它必须要解析并弄清楚。
我意识到我可能可以使用正则表达式或其他方式手动完成此操作,但是libpath或某些已经存在的模块是否可以通过某种方式完成?
使用特定的PurePath子类? PurePath根据正在运行的系统在内部在pathlib.PurePosixPath
和pathlib.PureWindowsPath
之间进行分派,但是如果您知道这是什么,则可以直接使用这些子类。
不是很有帮助,因为我认为两者之间没有真正的“桥梁”:PurePath(及其子类)可以将路径段作为输入,但是不返回路径段。
还请注意,您的Windows路径已损坏,\
是非原始python字符串中的转义字符,例如\f
将被解释为ASCII Formfeed (FF)。