在Python中优雅地获取目录的基本名称?

18 投票
6 回答
10869 浏览
提问于 2025-04-15 21:45

我有几个脚本,它们需要一个目录的名字作为输入,然后我的程序会在这些目录里创建文件。有时候,我想从用户给的目录名中提取出最后的部分(也就是目录的基本名字),然后用这个名字在目录里创建各种文件。比如:

# directory name given by user via command-line
output_dir = "..." # obtained by OptParser, for example
my_filename = output_dir + '/' + os.path.basename(output_dir) + '.my_program_output'
# write stuff to my_filename

问题是,如果用户输入的目录名后面有一个斜杠(/),那么使用 os.path.basename 函数就会返回一个空字符串,这不是我想要的。我想知道在 Python 中处理这些斜杠和尾部斜杠问题的优雅方法是什么?我知道我可以手动检查 output_dir 的末尾是否有斜杠,如果有就把它去掉,但我觉得应该有更好的方法。有没有?

另外,手动添加斜杠(/)这样做可以吗?比如说 output_dir + '/' os.path.basename(),还是说有更通用的方法来构建路径?

谢谢。

6 个回答

2

你应该使用 os.path.join() 来把路径合并在一起。

使用

os.path.dirname(os.path.join(output_dir,''))

可以提取出目录名,如果末尾没有斜杠的话,还会自动加上一个斜杠。

7

使用 os.path.join() 来构建文件路径。比如说:

>>> import os.path
>>> path = 'foo/bar'
>>> os.path.join(path, 'filename')
'foo/bar/filename'
>>> path = 'foo/bar/'
>>> os.path.join(path, 'filename')
'foo/bar/filename'
29

为了处理你提到的“结尾斜杠”问题(还有其他问题!),可以用 os.path.normpath() 来清理用户输入。

在构建路径的时候,使用 os.path.join()

撰写回答