为什么os.path.join会丢弃参数?

fhg3lkii  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(305)

我正在学习python,我注意到我的一个脚本有些奇怪。做了一点测试,我发现问题源于这种行为:

>>> import os
>>> os.path.join('a','b')
'a/b'
>>> os.path.join('a','/b')
'/b'

检查文档,这实际上是功能的设计:
join(路径1[,路径2[,…]))
智能地连接一个或多个路径组件。如果任何组件是绝对路径,则所有以前的组件(在windows上,包括以前的驱动器号,如果有)都将被丢弃,并继续加入。。。
我的问题不是为什么我的脚本失败,而是为什么函数是这样设计的。我是说,至少在unix上, a//b 是一种完全可以接受的指定路径的方式,如果不是优雅的话。为什么功能是这样设计的?是否有任何方法可以判断在测试每个路径字符串之前是否丢弃了一个或多个路径元素 os.path.isabs() ?
出于好奇,我还检查了路径组件以 os.sep 人物:

>>> os.path.join('a/','b')
'a/b'

这是意料之中的事。

lmvvr0a8

lmvvr0a81#

一种情况下,它对 os.path.join('a', '/b') 归来 /b 如果您向用户请求文件名,则为。
用户可以输入相对于当前目录的路径,也可以输入完整路径,您的程序可以这样处理这两种情况:

os.path.join(os.getcwd(), filename)
In [54]: os.getcwd()
Out[54]: '/tmp'

In [55]: os.path.join(os.getcwd(), 'foo')
Out[55]: '/tmp/foo'

In [56]: os.path.join(os.getcwd(), '/foo/bar')
Out[56]: '/foo/bar'
hmmo2u0o

hmmo2u0o2#

你认为你在写一个像 cd 要检查新目录,请使用

os.path.join(currdir, newdir)

如果用户输入 /b 你要抛出第一个论点。使用当前目录可以保存很多东西。

相关问题