当前位置: 首页 > 面试题库 >

在Windows上与os.path.join混合斜杠

上官凯泽
2023-03-14
问题内容

我倾向于只对路径(’/’)使用正斜杠,而python在Windows上也很满意。在os.path.join的描述中,它说的是跨平台的正确方法。但是当我使用它时,我会得到混合的斜杠:

import os

a = 'c:/'
b = 'myFirstDirectory/'
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'


print os.path.join(a, b, c, d, e)

# Result:
c:/myFirstDirectory/mySecondDirectory\myThirdDirectory\myExecutable.exe

这个对吗?我应该稍后检查并更正它,还是有更好的方法?

谢谢

编辑:询问路径时,我也会得到斜杠

import sys
for item in sys.path:
    print item

# Result:
C:\Program Files\Autodesk\Maya2013.5\bin
C:\Program Files\Autodesk\Maya2013.5\mentalray\scripts\AETemplates
C:\Program Files\Autodesk\Maya2013.5\Python
C:\Program Files\Autodesk\Maya2013.5\Python\lib\site-packages
C:\Program Files\Autodesk\Maya2013.5\bin\python26.zip\lib-tk
C:/Users/nookie/Documents/maya/2013.5-x64/prefs/scripts
C:/Users/nookie/Documents/maya/2013.5-x64/scripts
C:/Users/nookie/Documents/maya/scripts
C:\Program Files\Nuke7.0v4\lib\site-packages
C:\Program Files\Nuke7.0v4/plugins/modules

问题答案:

现在,您自己提供了一些斜线,让os.path.join其他人选择。最好让python选择所有它们,或者自己提供它们。Python在路径的后半部分使用反斜杠,因为反斜杠是Windows上的默认设置。

import os

a = 'c:' # removed slash
b = 'myFirstDirectory' # removed slash
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'

print os.path.join(a + os.sep, b, c, d, e)

我尚未对此进行测试,但希望对您有所帮助。具有基本路径并且只需要联接另一个元素(通常是文件)是更常见的。

顺便说说;
您可以os.sep在那些时刻想要为运行python的操作系统提供最佳分隔符。

编辑: 如dash-tom-bang所示,显然对于Windows,您确实需要包括路径根的分隔符。否则,您将创建相对路径,而不是绝对路径。



 类似资料:
  • 问题内容: 我正在尝试学习python,正在制作一个将输出脚本的程序。我想使用os.path.join,但是很困惑。根据文档,如果我说: 我懂了。根据文档,这是正常的,对吗? 但是,当我使用copytree命令时,Python将以所需的方式输出它,例如: 这是我得到的错误代码: 如果我用换行,则会得到相同的错误。 如果不能以这种方式使用它,那么我对其目的感到困惑。 根据Stack Overflow

  • 当以下转换在将RDD写入文件之前执行时,它们之间有什么区别? 聚结(1,洗牌=true) 合并(1,洗牌=假) 代码示例: 它与collect()相比如何?我完全知道Spark save方法将以HDFS风格的结构存储它,但我更感兴趣的是collect()和shuffled/non shuffled coalesce()的数据分区方面。

  • 问题内容: 看来,一个紧跟在上打开的文件(或)在Windows的权限不更新文件。 假设当前目录中有一个文件,其内容如下: 我执行以下代码: 我希望代码可以打印并将文件内容更新为: 至少在Linux上这可以正常工作。但是,当我在Windows上运行它时,该消息会正确显示,但文件没有更改- 就像被忽略了一样。如果我在文件句柄上调用它,则表明位置已更新(在和之前和之后),但文件没有更改。 但是,如果我在

  • 问题内容: 我可以 但是,当我这样做 我在这里想念什么? 问题答案: 问题是,不接受as参数,它必须是单独的参数。 在这里,“ splat”运算符开始起作用… 我可以

  • 问题内容: 在Java中,这样做并使用相同的锁定机制? 我的猜测是“不”,但我希望是错的。 例: 想象一下,线程1和线程2都可以访问: 线程1运行: 线程2运行: 假设线程1首先到达其部分,然后在线程1完成之前到达线程2:线程2将等待线程1离开该块,还是继续运行? 问题答案: 不,即使线程1 在同一线程上,线程2也可以。这是文档必须说的: 请注意,Lock实例只是普通对象,它们本身可以用作同步语句

  • 我试图从AbstractList派生一个具有上限可比性的委托类,并希望将列表用作可以包含空值的委托。以下是我的实现: 在main方法中,我尝试用List和List实例化类Mylist “类型不匹配。必需:可比较 为什么是Int?不属于可比类型