【问题标题】:how can one use os.listdir correctly on a network path?如何在网络路径上正确使用 os.listdir?
【发布时间】:2016-04-27 12:55:14
【问题描述】:

以下代码:

def tema_get_file():
    logdir='T:\\'
    logfiles = sorted([ f for f in os.listdir(logdir) if f.startswith('tms_int_calls-')])
    return logfiles[-1]

这运行良好,但我试图让logdir 使用直接路径运行: \\servername\path\folder 驱动器 T 是映射驱动器。最初,这些文件位于 C 盘上。

一旦我这样做,我就会收到错误消息:

WindowsError: [错误 3] 系统找不到指定的路径: '\servername\path\folder/.'

我试过了:

"\\servername\\path\\folder" , "\\servername\\path\\folder\\"

r"\\servername\path\folder" , r"\\servername\path\folder\"

"\\\\servername\\path\\folder" , "\\\\servername\\path\\folder\\"

【问题讨论】:

  • 您不能在 windows 路径中混合使用不同类型的斜线,例如:T:\a/b。所以问题出在示例错误中的/. 拖车上。然而,代码并没有显示路径是如何组装的。
  • 只要在任何地方使用正斜杠而不是反斜杠,就可以了。问题在于,如果您仔细查看错误,您会混淆正斜杠和反斜杠。
  • @myaut : logdir='\\servername\\path\\folder'
  • logdir='\\servername\\path\\folder\\'
  • @Games Brainiac:就是这样。我现在使用logdir='//servername//path//folder//

标签: python windows


【解决方案1】:

对我来说以下两项工作

os.listdir(r'\\server\folder')
os.listdir('\\\\server\\folder')

【讨论】:

  • 也为我工作,谢谢!
【解决方案2】:

os.listdir(myUNCpath) 无法正确处理 Windows UNC 路径,如果路径字符串不是由像 myUNCpath = "\\\\servername\\dir1\\dir2" 这样的文字定义或使用像 myUNCpath = "\\servername\dir1\dir2 这样的原始字符串,即使字符串变量是这样定义的,因为 listdir 总是从字符串变量。

但是,如果通过从 ini 文件或任何其他配置文件中读取 UNC 路径字符串来获取 UNC 路径字符串,该怎么办?

没有办法编辑为文字,也不可能使用前面的这个 r 字符使其成为原始字符串。

作为一种解决方法,我发现,可以将整个 UNC 路径字符串变量拆分为单个组件(以摆脱这个该死的反斜杠字符)并使用文字定义重新组合它,并通过此设置反斜杠字符。然后字符串运行良好 - incredibel 但真实!

这是我的功能,用来解决这个问题。如果文件中的路径定义为,则从函数返回的字符串将按预期工作 \servername\dir1\dir2(不添加反斜杠作为转义字符)

...
myworkswellUNCPath = recomposeUNCpathstring(myUNCpath)

...

def recomposeUNCpathstring(UNCstring):

    pathstring1 = UNCstring.replace("\\\\", "").strip()
    pathComponents = pathstring1.split("\\")
    pathstring = "\\\\" + pathComponents[0] 

    for i in range(1, len(pathComponents)-1):
        pathstring = pathstring + "\\" + pathComponents[i]

    return pathstring

干杯 斯蒂芬

【讨论】:

  • uups,抱歉在我的信息中输入了内容
  • like myUNCpath = "\\servername\dir1\dir2" 或使用像 myUNCpath = "\servername\dir1\dir2 这样的原始字符串应该像 myUNCpath = "\\\\servername\\dir1\ \dir2" 或使用原始字符串,如 myUNCpath = "\\servername\\dir1\\dir2
  • 这里是正确的句子 ------> 像 myUNCpath = "\\\\servername\\dir1\\dir2" 或使用像 myUNCpath = r "\\servername\ 这样的原始字符串\dir1\\dir2
  • no no no,又一个错误,这里是最正确的句子----->,例如 myUNCpath = "\\\\servername\\dir1\\dir2" 或使用原始字符串,例如 myUNCpath = r"\\servername\dir1\dir2
  • :p 您可以编辑您的答案并使其正确,而不是这些 cmets。编辑答案并删除这些 cmets。
猜你喜欢
  • 2018-09-27
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多