Python 从网络驱动器(windows)上的目录检索内容
我在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错误
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'
也可以工作