python находит последним в строке

#python #string #find

#python #строка #Найти

Вопрос:

Я ищу простой метод определения последней позиции строки внутри другой строки… например. Если бы у меня было: file = C:UsersUserDesktopgo.py
и я хотел обрезать это так, чтобы file = go.py

Обычно мне приходилось бы выполнять C:UsersUserDesktopgo.py инструкцию loop find, и каждый раз, когда она сталкивалась с , она спрашивала… является последним в строке? … Как только я нашел последнее , я бы тогда file = file[last:len(file)]
Мне любопытно узнать, есть ли более быстрый и аккуратный способ сделать это .. предпочтительно без цикла.
Что-то вроде file = [file('', last ):len(file)]
Если нет ничего подобного тому, что я показал выше… тогда можем ли мы каким-то образом поместить цикл внутри [:] . Что-то вроде file = [for i in ...:len(file)]

спасибо 🙂

Ответ №1:

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

 >>> import os
>>> os.path.basename(file)
'go.py'
  

Или, если вы не запускаете код в Windows, вам придется использовать ntpath вместо os.path .

Комментарии:

1. При работе с путями к файлам это лучшее решение. Но просто для справки: в python также есть rfind метод: docs.python.org/library/stdtypes.html#str.rfind

2. Как я уже сказал: rfind не очень хорошо выглядит с путями к файлам, os.path решение является лучшим.

Ответ №2:

Вы могли бы разделить строку на список, а затем получить последний индекс списка.

Пример:

 >>> file = 'C:UsersUserDesktopgo.py'
>>> print(file.split('\')[-1])
go.py
  

Комментарии:

1. Другие ответы великолепны .. но мне нравится ваш, потому что он имеет более широкое применение… не только в строках пути.

2. Спасибо, чувак 🙂 это хороший, чистый вариант, который не требует добавления зависимостей. Я думаю, что если бы вам пришлось иметь дело с ОС не только в этой ситуации, то добавление дополнительного импорта было бы лучшим вариантом.

3. Вы не должны разделять строку, а затем брать только одну ее часть. Это и медленнее, и запутаннее. Гораздо более простой метод — x[x.rfind('\') 1:] кстати, вы можете захотеть избежать имени file для вашей переменной name, потому что это затенит встроенный файловый объект.

Ответ №3:

Я согласен с Felix в том, что пути к файлам должны обрабатываться с помощью os.path.basename . Однако, возможно, вы захотите взглянуть на встроенную строковую функцию rpartition .

 >>> file = 'C:UsersUserDesktopgo.py'
>>> before, separator, after = file.rpartition('\')
>>> before
'C:\Users\User\Desktop'
>>> separator
'\'
>>> after
'go.py'
  

Также существует rfind функция, которая выдает вам последний индекс подстроки.

 >>> file.rfind('\')
21
  

Я понимаю, что немного опоздал на вечеринку, но поскольку это один из лучших результатов при поиске, например, «find last in str python» в Google, я думаю, это могло бы помочь кому-нибудь добавить эту информацию.

Ответ №4:

Для случая общего назначения (как сказал OP, им нравится обобщение разделенного решения) …… попробуйте rfind(str) функцию.

 "myproject-version2.4.5.customext.zip".rfind(".")
  

редактировать: извинения, я не понял, сколько лет этому потоку… :-/

Ответ №5:

Для манипуляций с путями, которые вы хотите использовать os.path .

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

 import os.path

print os.path.basename("C:UsersUserDesktopgo.py")
  

Дает:

go.py