os.path.join 中缺少斜线来自 tkinter filedialog

missing slash in os.path.join result from tkinter filedialog

我在这里加入路径的方式有什么问题?

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

我正在从 tkinter 的文件对话框中获取路径。

即filedialog.askdirectory()

示例路径:

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

我在做什么:

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

这将打印出以下内容:

C:MyUserName/Desktop/SomeDir/somefile.txt

为什么会输第一个/

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

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

您正在使用 Windows,对吗?

来自文档:

On Windows, the drive letter is not reset when an absolute path component (e.g., r'\foo') is encountered. If a component contains a drive letter, all previous components are thrown away and the drive letter is reset. Note that since there is a current directory for each drive, os.path.join("c:", "foo") represents a path relative to the current directory on drive C: (c:foo), not c:\foo.

这意味着c:foo实际上是一条正确的路径。试试 os.path.abspath('c:foo')os.path.abspath('c:\foo') 看看区别。第一个路径是c盘的相对路径,第二个是绝对路径。

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