2011-11-22 17 views
11

Tengo un archivo llamado algo como FILE-1.txt o FILE-340.txt. Quiero poder obtener el número del nombre del archivo. He descubierto que puedo utilizar¿Cómo encuentro un número en una cadena en Python?

numbers = re.findall(r'\d+', '%s' %(filename)) 

para obtener una lista que contiene el número, y el uso de los números [0] para obtener el número en sí como una cadena ... Pero si sé que es sólo un número, parece indirecto e innecesario hacer una lista para obtenerlo. Hay otra manera de hacer esto?


Edit: ¡Gracias! Supongo que ahora tengo otra pregunta. En lugar de obtener una cadena, ¿cómo obtengo el número entero?

+2

¿Lo entiendo correctamente, que con ''% s'% (filename)' está convirtiendo una cadena en una cadena? Si 'filename' es una cadena, simplemente reemplaza' '% s'% (filename) 'con' filename'. – Tadeck

+0

Añadiendo al comentario de Tadeck, si 'filename' no es una cadena,' 'str (filename)' es equivalente a ''% s'% filename'. –

Respuesta

18

Uso search en lugar de findall:

number = re.search(r'\d+', filename).group() 

alternativa:

number = filter(str.isdigit, filename) 
+1

Aunque 'filter' es más similar a' re.findall' en los casos en que hay varios grupos de números, p. utilizando _ "FILE-340-1.txt" _ 'filter' produce _" 3401 "_ mientras' re.search' solo devuelve el primer grupo _ "340" _. –

1

si desea que su programa sea eficaz

uso esto:

num = filename.split("-")[1][:-4] 

esto funcionará sólo para el ejemplo que usted mostró

+0

¿Qué hace [1] [: - 4]? – user1058492

+1

Es tomar la segunda parte de la división y luego cortar los últimos 4 caracteres [".txt"] – Davido

1

Otra forma sólo por diversión:

In [1]: fn = 'file-340.txt' 

In [2]: ''.join(x for x in fn if x.isdigit()) 
Out[2]: '340' 
2

Adición al comentario de FJ, si quieres un int, puede utilizar:

numbers = int(re.search(r'\d+', filename).group()) 
0

En respuesta a su nueva pregunta se puede emitir el string a un int:

>>>int('123') 
123 
Cuestiones relacionadas