15

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

path = "\\\\nexus\\File Server\\Technical\\MyDrive\\Software\\Releases\\%s\\%s\\" %(release, module)

\\nexus\网络驱动器在哪里。

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

我尝试过的事情

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

     "\\\\\\\\nexus\\File Server\\\\Technical\\\\MyDrive\\\\Software\\\\Releases\\\\release\\\\module\\\\"
    
  2. print(glob.glob(path))
    我真的不知道它是如何工作的:P 但它似乎只是显示提供的目录而不是结束目录的内容

      \\nexus\File Server\Technical\MyDrive\Software\Releases\release\module\"
    

我见过一个os.walk但是我不确定它是如何工作的,因为它如何定义基本目录/目录以及路径的其余部分是什么

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

4

3 回答 3

21

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

os.listdir('\\\\myshare') # Fails with "WindowsError: [Error 53] The network path was not found"

os.listdir('\\\\myshare/folder') # Succeeds

我认为某些混淆可能是由显示repr()路径的 WindowsError 引起的,而不是实际路径 -

>>> 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,因此我无法对此进行测试,但请让我知道它是否有效,我将编辑我的答案)

于 2013-01-16T09:00:06.020 回答
2

这个对我有用:

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

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

于 2015-10-21T06:52:58.657 回答
0

此问题的解决方法如下:

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

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

于 2015-05-27T07:15:01.540 回答