在tkinter filedialog的os.path.join结果中缺少斜杠

时间:2016-03-10 06:10:04

标签: python python-3.x tkinter python-3.4 python-os

我在这里加入自己的道路有什么不对?

除了列表中的第一项之外的所有内容都将正确加入。

我从tkinter的一个文件中抓取一条路径。

即filedialog.askdirectory()

示例路径:

PATH = "C:/MyUserName/Desktop/SomeDir"

我在做什么:

os.path.join(*(PATH.split("/") + ["somefile.txt"]))

这将打印出以下内容:

C:MyUserName/Desktop/SomeDir/somefile.txt

为什么会丢失第一个/

3 个答案:

答案 0 :(得分:3)

我需要使用os.normpath转换我的初始路径我从tkinter获取了一个filedialog输入,然后尝试在问题中使用上述路径样式/代码来访问/创建文件。

由于Windows上的连接/分隔错误导致错误。

答案 1 :(得分:2)

你正在使用Windows,对吗?

来自文档:

  

在Windows上,遇到绝对路径组件(例如,r'\ foo')时,不会重置驱动器号。如果组件包含驱动器号,则会丢弃所有先前的组件并重置驱动器号。请注意,由于每个驱动器都有一个当前目录,os.path.join(“c:”,“foo”)表示相对于驱动器C上当前目录的路径:(c:foo),而不是c:\ foo

这意味着c:foo实际上是一条正确的路径。请尝试os.path.abspath('c:foo')os.path.abspath('c:\\foo')查看差异。第一个路径是c驱动器上的相对路径,第二个路径是绝对路径。

答案 2 :(得分:2)

Windows保留所有驱动器的当前路径。 C:MyUserName/Desktop/SomeDir/somefile.txtC:/MyUserName/Desktop/SomeDir/somefile.txt都有效,ntpath.join无法知道您是否需要驱动器相对路径或驱动器绝对路径。