Py学习  »  Python

Python os的用例是什么。路径当一个参数是绝对路径时,是否在之前删除所有参数?[重复]

henning • 3 年前 • 1354 次点击  

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

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

检查 documentation ,这实际上是功能的设计:

操作系统。路径 参加 ( 路径1 [ , 路径2 [ , ... ]] )

智能地连接一个或多个路径组件。如果任何组件是绝对路径,则所有以前的组件(在Windows上,包括以前的驱动器号,如果有)都将被丢弃,并继续加入。。。

我的问题不是 why my script failed 而是为什么功能是这样设计的。我是说,至少在Unix上, a//b 这是一种完全可以接受的指定路径的方式,如果不是优雅的话。为什么功能是这样设计的?有没有办法判断一个或多个path元素在测试每个path字符串之前是否已被丢弃 os.path.isabs() ?


出于好奇,我还检查了路径组件以 os.sep 人物:

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

正如预期的那样。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128276
 
1354 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Dani
Reply   •   1 楼
Dani    12 年前

你觉得你在写一个像 cd 要检查新目录,可以使用

os.path.join(currdir, newdir)

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

unutbu
Reply   •   2 楼
unutbu    12 年前

一种情况下,它对 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'