开发者

Elegant way to take basename of directory in Python?

I have several scripts that take as input a directory name, and my program creates files in those directories. Sometimes I want to take the basename of a directory given to the program and use it to make 开发者_如何转开发various files in the directory. For example,

# 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

The problem is that if the user gives a directory name with a trailing slash, then os.path.basename will return the empty string, which is not what I want. What is the most elegant way to deal with these slash/trailing slash issues in python? I know I can manually check for the slash at the end of output_dir and remove it if it's there, but there seems like there should be a better way. Is there?

Also, is it OK to manually add '/' characters? E.g. output_dir + '/' os.path.basename() or is there a more generic way to build up paths?

Thanks.


To deal with your "trailing slash" issue (and other issues!), sanitise user input with os.path.normpath().

To build paths, use os.path.join()


Use os.path.join() to build up paths. For example:

>>> 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'


You should use os.path.join() to add paths together.

use

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

to extract dirname, while adding a trailing slash if it was omitted.


Manually building up paths is a bad idea for portability; it will break on Windows. You should use os.path.sep.

As for your first question, using os.path.join is the right idea.


to build the paths without writing slashes it is better to use:

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

if you want to add separators or get the separator independly of the os, then use

 os.sep
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜