Изящный способ взять базовое имя каталога в Python?

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

# 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 () или является там более универсальным способом создать пути?

Спасибо.

12
задан SilentGhost 18 April 2010 в 19:07
поделиться

5 ответов

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

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

19
ответ дан 2 December 2019 в 05:03
поделиться

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

используйте

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

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

2
ответ дан 2 December 2019 в 05:03
поделиться

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

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

1
ответ дан 2 December 2019 в 05:03
поделиться

Используйте 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'
7
ответ дан 2 December 2019 в 05:03
поделиться

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

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

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

 os.sep
1
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: