Как вырезать конец строки по некоторому условию в Python?
Я искал возможные пути, но пока не могу их перепутать. У меня есть строка, которая является путем к изображению.
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
Что я хочу сделать, это заменить images
с IMAGES
и отрезать 073-1_00191.jpeg
часть в конце. Таким образом, новая строка должна быть
newString = "D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA/"
И нарезанная часть (073-1_00191.jpeg
) будет использоваться отдельно в качестве имени обработанного изображения. Функция .replace()
здесь не работает, так как мне нужно предоставить path
а также filename
как отдельные параметры.
Причина, по которой я хочу это сделать, заключается в том, что я обращаюсь к изображениям по их путям и делаю с ними что-то, а при их сохранении мне нужно создать другой каталог (в данном случае IMAGES
) и следующие каталоги после этого (в данном случае AAAAA
) должен остаться прежним (вместе с названием соответствующего изображения).
Обратите внимание, что изображения могут иметь разные имена и расширения
Если что-то не понятно с моей стороны, пожалуйста, спросите, я постараюсь прояснить
3 ответа
Как упоминалось в комментариях, os.path полезен для манипулирования путями, представленными в виде строк.
>>> import os
>>> myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
>>> dirname, basename = os.path.split(myString)
>>> dirname
'D:/Train/16_partitions_annotated/partition1/images/AAAAA'
>>> basename
'073-1_00191.jpeg'
На этом этапе то, как вы хотите использовать заглавные буквы, является функцией вашей более широкой цели. Если вы хотите просто использовать это слово с большой буквы, dirname.replace('images', 'IMAGES')
должно хватить. Но вы, похоже, спрашиваете о более обобщенном способе использовать второй и последний каталог в абсолютном пути:
>>> def cap_penultimate(dirname):
... h, t = os.path.split(dirname)
... hh, ht = os.path.split(h)
... return os.path.join(hh, ht.upper(), t)
...
>>> cap_penultimate(dirname)
'D:/Train/16_partitions_annotated/partition1/IMAGES/AAAAA'
Простой способ:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
a = myString.rfind('/')
filename = myString[a+1:]
restofstring = myString[0:a]
alteredstring = restofstring.replace('images', 'IMAGES')
print(alteredstring)
выход:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA
Это игра нарезки, здесь вы можете попробовать это:
myString= "D:/Train/16_partitions_annotated/partition1/images/AAAAA/073-1_00191.jpeg"
myString1=myString.split('/')
pre_data=myString1[:myString1.index('images')]
after_data=myString1[myString1.index('images'):]
after_data=['IMAGE'] + after_data[1:2]
print("/".join(pre_data+after_data))
выход:
D:/Train/16_partitions_annotated/partition1/IMAGE/AAAAA