14

我有几个将目录名称作为输入的脚本,我的程序在这些目录中创建文件。有时我想取给程序的目录的基本名称,并用它来制作目录中的各种文件。例如,

# 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() 还是有更通用的方法来构建路径?

谢谢。

4

5 回答 5

25

要处理您的“尾部斜杠”问题(和其他问题!),请使用os.path.normpath().

要构建路径,请使用os.path.join()

于 2010-04-18T19:15:13.210 回答
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'
于 2010-04-18T19:05:36.383 回答
2

您应该使用os.path.join()将路径添加在一起。

采用

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

提取目录名,如果省略,则添加尾部斜杠。

于 2010-04-18T19:11:31.110 回答
1

手动建立路径不利于可移植性;它会在 Windows 上中断。您应该使用 os.path.sep。

至于您的第一个问题,使用 os.path.join 是正确的想法。

于 2010-04-18T19:05:09.563 回答
1

要在不写斜杠的情况下构建路径,最好使用:

os.path.join(dir, subdir, file)

如果要添加分隔符或独立于操作系统获取分隔符,请使用

 os.sep
于 2010-04-18T19:09:07.513 回答