Tengo una imagen y la he cortado en 16 rebanadas usando image_slicer
, y las imágenes se nombran como 0804220001-5_01_01.png,0804220001-5_01_02.png,0804220001-5_01_03.png
y así sucesivamente. Usando split
necesito el texto 01_01,01_02, .. Intenté usar split y rsplit pero no obtengo el resultado. a continuación está mi código.
#img1 is the path of the image which is
#Features/input/0804220001-5_02_04.png
name1 = img1.split('/')[-1]
patch = name1.rsplit('_')[1]
print(patch)
Obtengo la salida como 01 pero necesito la salida como 01_01,01_02
4 respuestas
Puede usar re.search
con el patrón _(.*)\.
:
import re
str = " 0804220001-5_02_04.png "
print(re.search('_(.*)\.', str).group(1))
Que extrae 02_04
como salida.
Podemos intentar usar re.findall
aquí para un enfoque de expresiones regulares:
images = ["0804220001-5_01_01.png", "0804220001-5_01_02.png", "0804220001-5_01_03.png"]
# form single | delimeted string of all images
all_images = "|".join(images)
terms = re.findall(r'(\d+_\d+)\.png', all_images)
print(terms)
Esto imprime:
['01_01', '01_02', '01_03']
En su caso, si desea apegarse a su método y sin usar la ruta del sistema operativo ni nada, simplemente puede arreglar el rsplit () para dividir (). Puede usar split () para dividir. El siguiente código significaba que se dividía con '_' como máximo una vez y comenzando desde la izquierda. El argumento opcional Split () es cuántas veces desea dividir y su valor predeterminado es -1 (infinito).
img1 = "Features/input/0804220001-5_02_04.png"
name1 = img1.split('/')[-1]
patch = name1.split('_', 1)[1] # this if you don't want the file name --> [:-4]
print(patch)
import os
foo = 'some/path/0804220001-5_01_01.png'
print('_'.join(os.path.splitext(foo)[-2].split('_')[-2:]))
Salida
01_01
Por supuesto, puedes hacer de esto una función