У меня есть несколько сценариев, которые берут в качестве входа имя каталога, и моя программа создает файлы в тех каталогах. Иногда я хочу взять базовое имя каталога, данного программе и использовать его для создания различных файлов в каталоге. Например,
# 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 () или является там более универсальным способом создать пути?
Спасибо.
Чтобы решить проблему с "конечной косой чертой" (и другие проблемы!), Очистите вводимые пользователем данные с помощью os.path.normpath ()
.
Для построения путей используйте os.path.join ()
Вы должны использовать os.path.join () , чтобы складывать пути вместе.
используйте
os.path.dirname(os.path.join(output_dir,''))
для извлечения имени каталога с добавлением косой черты в конце, если он был опущен.
Создание путей вручную - плохая идея для переносимости; он сломается на Windows. Вам следует использовать os.path.sep.
Что касается вашего первого вопроса, использование os.path.join - правильная идея.
Используйте 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'
для построения путей без записи косой черты лучше использовать:
os.path.join(dir, subdir, file)
если вы хотите добавить разделители или получить разделитель независимо от операционной системы, используйте
os.sep