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

1
Krupali Mistry 3 oct. 2019 a las 08:47

4 respuestas

La mejor respuesta

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.

2
Barbaros Özhan 3 oct. 2019 a las 06:39

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']
0
Tim Biegeleisen 3 oct. 2019 a las 05:52

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)
0
Kevin Ng 3 oct. 2019 a las 06:06
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

0
buran 3 oct. 2019 a las 05:55
58212981