【问题标题】:Converting a path to a file on a network drive from macos to windows将网络驱动器上文件的路径从 macos 转换为 windows
【发布时间】:2019-02-04 00:05:27
【问题描述】:

我想在我的 Mac 上选择一个文件,并希望在 Windows 机器上使用我在 Mac 上输入的路径打开该文件。我有一个文件所在的服务器,映射如下:

Mac:/Volumes/myraid/projects/file.txt

Windows X:\projects\file.txt

有什么方法可以将路径从 mac 转换为服务器上的任何文件,以便在任何 Windows 机器上打开,并且能够访问服务器?操作路径的代码应该在windows机器上执行。

编辑:我的主要问题是路径的前面部分,因为 Windows 为每个单独的驱动器分配了不同的字母(例如X:\)。特别是当我有多个网络驱动器并且我希望能够从所有驱动器中选择文件时。

【问题讨论】:

    标签: python windows macos path network-drive


    【解决方案1】:

    我不知道这是否是最优雅的解决方案。对于多个驱动器上存在具有相同文件路径的相同文件名,此解决方案也不安全,但它适用于我。

    import os.path
    
    def findnetworkpath(path_input):    
        path_input = os.path.normpath(path_input) #converts forward slashes to backward slashes
        path_snippet = os.path.join(*path_input.split(os.sep)[2:]) #cuts "Volumes/myraid/" out of the path
    
        dl = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
        drives = ['%s:' % d for d in dl if os.path.exists('%s:' % d)] #checks for existing drives
        for drive in drives:
            if os.path.exists(drive + "\\" + path_snippet):   #checks if the path snippet is the subpath of any connected drives
                return drive + "\\" + path_snippet #function returns the path the windows machine has to the file
    
    print(findnetworkpath("Volumes/myraid/projects/file.txt"))
    

    【讨论】:

      【解决方案2】:

      您可以使用os.path.join(),它根据运行平台的规则加入一个目录列表。

      >>> # windows
      >>> os.path.join('projects', 'file.txt')
      projects\file.txt
      >>> # mac osx
      >>> os.path.join('projects', 'file.txt')
      projects/file.txt
      

      您还可以使用os.name 获取程序当前所在的操作系统,以便您可以相应地编辑路径的开头。

      【讨论】:

      • 谢谢。我认为我对这个问题的解释可能有点令人困惑。假设我在同一台服务器上有多个网络驱动器(例如 myraid、myraid2 和 myraid3)。它们中的每一个都被检测为单独的网络驱动器。与 macos 和 linux 不同,Windows 为我的驱动器分配不同的字母。问题不在于路径的后端(在这种情况下,“myraid”之后的所有内容),我无法弄清楚如何从根目录获取所选文件的 Windows 路径,尤其是如何使我的代码独立于驱动器号窗口分配给它。
      • 是的,对不起,我没有理解这个问题,也不能说我能比你的解决方案做得更好
      猜你喜欢
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多