2015-06-03 2 views
0

Это должна быть основная вещь, которую нужно сделать, но я не могу заставить ее работать, несмотря на множество примеров из Интернета. Я пытаюсь использовать вспомогательную функцию, чтобы получить имя файла из полного пути.python: функция sub of re module

Так что, если

output="/home/alvarofeal/Desktop/prueba_sub.avi" 
re.sub(r'(.*\/)*', "", output) 
print output 

output: /home/alvarofeal/Desktop/prueba_sub.avi 

Не следует вывод быть:

prueba_sub.avi 

ответ

2

re.sub() возвращает новую строку. Строки неизменяемы и не могут быть изменены на месте.

Вы игнорируете возвращаемое значение; хранить его обратно в output если вы хотите заменить старое значение:

output = "/home/alvarofeal/Desktop/prueba_sub.avi" 
output = re.sub(r'(.*\/)*', "", output) 
print output 

Если все, что вы делаете, разделив базовое имя пути к файлу, вы, вероятно, хотите использовать os.path.basename() function вместо хотя.

+0

Rookie ошибка, которая работала до совершенства, проверка ответ, как только я могу! –

1

Вы должны сделать,

output = re.sub(r'(.*\/)*', "", output) 

С re.sub() возвращает новую строку

ИЛИ использованием ntpath

>>>import ntpath 
>>>ntpath.basename(output) 
'prueba_sub.avi' 
+0

Почему вы используете ntpath? –

+0

Я думаю, что это независимая от платформы (косую черту и обратную косую черту) – itzMEonTV

1

Вам не нужно регулярное выражение для этого task.As более pythonic вы можете использовать os.path.basename с str.split:

>>> os.path.basename('/home/alvarofeal/Desktop/prueba_sub.avi').split('.')[0] 
'prueba_sub' 

или просто использовать basename, чтобы получить имя в формате:

>>> os.path.basename('/home/alvarofeal/Desktop/prueba_sub.avi') 
'prueba_sub.avi' 
+1

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

Смежные вопросы