2012-05-30 3 views
3

Я новичок в Python, просто интересно, что это лучший способ для питона сделать следующее:наиболее эффективный способ пути подстроки и файл из строки

file='/var/log/test.txt' 
==action== 

после == Действие ==, я хочу чтобы получить путь и файл разделены как:

path='/var/log' 
file_name='test.txt' 

Я не спрашиваю, как это сделать, я задаю самый эффективный способ сделать это, используя наименьшее количество строк кода.

= EDIT =

Что делать, если файл = 'test.txt' вместо файла = '/ вар/Журнал/test.txt'. Я был бы более вероятно ожидать:

path='.' 
path='test.txt' 

кроме

path='' 
file_name='test.txt' 

что наконечник для этого тогда?

+0

Актуально новый вопрос: В чем проблема с 'path ==" "'? Вы сказали, что это не то, что вы ожидаете, но это не проблема сама по себе. –

+0

@SvenMarnach Мне просто интересно, есть ли какой-то существующий способ, который я пропускаю, кроме проверки «если нет». Но похоже, что проверка «если не путь» нужна в моем случае. Спасибо – Shengjie

+0

Я хочу сказать, что нет необходимости преобразовывать пустое имя каталога в явный ''. "'. пустая строка также будет работать в любой ситуации, которую я могу себе представить, поэтому я не вижу смысла в дополнительном коде. –

ответ

10
file = '/var/log/test.txt' 
path, file_name = os.path.split(file) 

выходы:

path 
'/var/log' 

file_name 
'test.txt' 

Для использования os.path.split()import os требуется. Я должен подумать, что библиотека Python настолько эффективна, насколько это возможно.

Чтобы ответить на обновление/редактирования, если не указан путь, и вы хотите . для пути, добавьте:

if not path: path = '.' 

Ie,

file = 'test.txt' 
path, file_name = os.path.split(file) 
if not path: path = '.' 

дает:

path 
'.' 

file_name 
'test.txt' 
7

Вы должны посмотреть на documentationos.path, есть split функция, например:

path, file_name = os.path.split('/var/log/test/txt')