Python 从网络驱动器(windows)上的目录检索内容

Python 从网络驱动器(windows)上的目录检索内容,python,python-3.x,Python,Python 3.x,我在Windows上显示网络驱动器中的文件时遇到问题 path = "\\\\nexus\\File Server\\Technical\\MyDrive\\Software\\Releases\\%s\\%s\\" %(release, module) 其中\\nexus\是一个网络驱动器 我的主要问题是,如果用户输入了正确的变量,我就无法显示所请求目录的内容(“模块”的内容) 我尝试过的事情 os.listdir(路径) 上面这一行的问题是它返回了一个windows错误

我在Windows上显示网络驱动器中的文件时遇到问题

path = "\\\\nexus\\File Server\\Technical\\MyDrive\\Software\\Releases\\%s\\%s\\" %(release, module)
其中
\\nexus\
是一个网络驱动器

我的主要问题是,如果用户输入了正确的变量,我就无法显示所请求目录的内容(“模块”的内容)

我尝试过的事情
  • os.listdir(路径)

    上面这一行的问题是它返回了一个windows错误[123],即找不到目录错误。这是因为listdir()似乎将所有后斜杠加倍 导致:

     "\\\\\\\\nexus\\File Server\\\\Technical\\\\MyDrive\\\\Software\\\\Releases\\\\release\\\\module\\\\"
    
  • 打印(glob.glob(路径))

    我真的不知道它是如何工作的:P,但它似乎只是显示提供的目录,而不是结束目录的内容

      \\nexus\File Server\Technical\MyDrive\Software\Releases\release\module\"
    
  • 我见过一个
    os.walk
    ,但是我不确定它是如何工作的,因为它如何定义基本目录和路径的其余部分


    额外说明:“模块”的内容将始终是一个zip文件,而且目录通常最多包含五个zip文件。

    刚刚在我的XP PC、Python 2.7、SMB share上测试过。
    \\myshare

    os.listdir('\\\\myshare') # Fails with "WindowsError: [Error 53] The network path was not found"
    
    os.listdir('\\\\myshare/folder') # Succeeds
    
    我认为一些混乱可能是由于WindowsError显示路径的
    repr()
    ,而不是实际路径引起的-

    >>> repr(path)
    "'\\\\myshare'"
    >>> str(path)
    '\\myshare'
    
    如果这是Python 3和unicode的问题,我建议首先尝试修复字符串:

    path = "\\\\myshare\folder"
    path = bytes(path, "utf-8").decode("unicode_escape")
    print os.listdir(path)
    

    (不幸的是,我无法测试此问题,因为我没有安装Python 3,但请告诉我它是否有效,我将编辑我的答案)

    此问题的解决方法如下:

    os.listdir('\\networkshares\\folder1\\folder2\\folder3')
    

    这意味着您必须使用双斜杠,而不是单斜杠。

    这一条对我很有用:

    os.listdir('\\\\server\folder\subfolder\etc')
    

    (在Win7 64b上使用Python 2.7 32b)

    您应该删除所有的双斜杠。通过将
    r
    放在原始字符串前面来使用原始字符串。所以它应该是这样的:
    r'\\nexus\fileserver\Technical\MyDrive\Software\release\release\module\'
    这是第一件事。试试看。其次,在windows上,您也可以使用正斜杠,如:
    r'\\nexus/File Server/Technical/MyDrive/Software/release/release/module/'
    但网络资源仍然需要双反斜杠。请尝试以下方法:path=“//nexus/File Server/Technical/MyDrive/Software/Releases/%s/%s/”%(release,module)@InbarRose:后面的反斜杠不起作用<代码>模块\'即使在原始字符串文本中,也能逃脱关闭
    '
    。@MartijnPieters是的,谢谢,现在是凌晨,我还没有喝完咖啡:)你能简单地将
    \\nexus
    映射到
    Z:
    ?类似的问题:有趣的是,你应该提到一个unicode问题,IDLE(临时python IDE会抱怨,除非我保存编码为utf-8的脚本。另外,由于我明天不在工作,我在周一之前无法真正测试任何新的解决方案或想法,我可以将vpn接入我们的网络,但我不确定python将如何处理。感谢所有回复,@JohnSmith无需担心,有机会时让我知道你如何处理。我建议尝试一下g确保Python首先认为
    \\nexus\File Server\Technical
    存在,然后您可以担心替换字符串:)。(
    isdir()
    存在()
    应该有帮助)如果共享文件夹有凭据,会发生什么?我有用户名和密码。我应该把这些参数放在哪里?@gs\u developer\u user3605534-有帮助吗?看起来,
    \\\\\server/folder'
    '//server/folder'
    也可以工作