Элегантный способ взять базовое имя каталога в Python? - PullRequest
10 голосов
/ 18 апреля 2010

У меня есть несколько сценариев, которые принимают в качестве входных данных имя каталога, и моя программа создает файлы в этих каталогах. Иногда я хочу взять базовое имя каталога, данного программе, и использовать его для создания различных файлов в каталоге. Например,

# 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 () или есть более общий способ построения путей?

Спасибо.

Ответы [ 5 ]

18 голосов
/ 18 апреля 2010

Чтобы решить проблему с "косой чертой" (и другими проблемами!), Очистите пользовательский ввод с помощью os.path.normpath().

Для построения путей используйте os.path.join()

7 голосов
/ 18 апреля 2010

Используйте 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'
2 голосов
/ 18 апреля 2010

Вы должны использовать os.path.join () , чтобы добавить пути вместе.

использовать

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

для извлечения dirname, при добавлении косой черты, если оно было опущено.

1 голос
/ 18 апреля 2010

для построения путей без написания слешей лучше использовать:

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

если вы хотите добавить разделители или получить разделитель независимо от ОС, используйте

 os.sep
1 голос
/ 18 апреля 2010

Создание путей вручную - плохая идея для переносимости; это сломается на Windows. Вы должны использовать os.path.sep.

Что касается вашего первого вопроса, использование os.path.join - правильная идея.

...