从网络驱动器上的目录中检索内容(Windows)
Posted
技术标签:
【中文标题】从网络驱动器上的目录中检索内容(Windows)【英文标题】:Retrieving contents from a directory on a network drive (windows) 【发布时间】:2013-01-16 08:32:34 【问题描述】:我遇到了关于在 Windows 上显示网络驱动器中的文件的问题。
path = "\\\\nexus\\File Server\\Technical\\MyDrive\\Software\\Releases\\%s\\%s\\" %(release, module)
其中\\nexus\
是网络驱动器。
我的主要问题是用户输入了正确的变量,我无法显示所请求目录的内容(“模块”的内容)。
我尝试过的事情
os.listdir(path)
上面这行的问题是它返回了一个 Windows 错误 [123],即找不到目录错误。这是因为 listdir() 似乎将所有反斜杠加倍
结果:
"\\\\\\\\nexus\\File Server\\\\Technical\\\\MyDrive\\\\Software\\\\Releases\\\\release\\\\module\\\\"
print(glob.glob(path))
我真的不知道它是如何工作的:P 但它似乎只是显示提供的目录而不是结束目录的内容
\\nexus\File Server\Technical\MyDrive\Software\Releases\release\module\"
我见过os.walk
,但我不确定它是如何工作的,因为它如何定义基本目录/目录以及路径的其余部分是什么
补充说明:“模块”的内容将始终是一个 zip 文件,该目录通常最多包含五个 zip 文件。
【问题讨论】:
您应该删除所有的双斜杠。通过将r
放在它前面来使用原始字符串。所以它应该看起来像这样:r'\\nexus\File Server\Technical\MyDrive\Software\Releases\release\module\'
这是第一件事。试试看。其次,在 Windows 上,您也可以使用正斜杠,例如:r'\\nexus/File Server/Technical/MyDrive/Software/Releases/release/module/'
,但您仍然需要双反斜杠作为网络资源。
试试这个:path = "//nexus/File Server/Technical/MyDrive/Software/Releases/%s/%s/" %(release, module)
@InbarRose:不使用尾随反斜杠,这将不起作用.. module\'
转义关闭 '
,即使在原始字符串文字中也是如此。
@MartijnPieters 是的,谢谢,现在是一大早,我还没有喝完咖啡:)
你能简单地将\\nexus
映射到Z:
吗?类似问题:***.com/questions/1459590/…
【参考方案1】:
刚刚在我的 XP 电脑上测试,Python 2.7,SMB 共享 \\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,因此我无法对此进行测试,但请让我知道它是否有效,我将编辑我的答案)
【讨论】:
有趣的是,你应该提到一个 unicode 问题,IDLE(临时 python IDE 抱怨,除非我将脚本保存为 utf-8。 另外,由于我明天不上班,直到星期一我才能真正测试任何新的解决方案或想法,我可以 *** 进入我们的网络,但我不确定 python 将如何处理它感谢所有回复, @JohnSmith 不用担心,如果有机会,请告诉我您的进展情况。我建议尝试确保 Python 认为\\nexus\File Server\Technical
首先存在,然后您可以担心替换字符串 :)。 (isdir()
或 exists()
应该有帮助)
如果共享文件夹有凭据会怎样?我有用户名和密码。我应该把这些参数放在哪里?
@gs_developer_user3605534 - ***.com/questions/28865050/… 有帮助吗?【参考方案2】:
这个对我有用:
os.listdir('\\\\server\folder\subfolder\etc')
(在 Win7 64b 上使用 Python 2.7 32b)
【讨论】:
看起来,'\\\\server/folder'
和 '//server/folder'
也有效【参考方案3】:
此问题的解决方法如下:
os.listdir('\\networkshares\\folder1\\folder2\\folder3')
这意味着你必须使用双斜杠而不是单斜杠。
【讨论】:
以上是关于从网络驱动器上的目录中检索内容(Windows)的主要内容,如果未能解决你的问题,请参考以下文章
在 powershell ssh 会话中访问 Windows 网络驱动器