Suma de cadenas extraídas de un archivo de texto usando expresiones regulares

Solo estoy aprendiendo python y necesito ayuda para mi tarea de clase.

Tengo un archivo con texto y números. Algunas líneas tienen de uno a tres números y otras no tienen números.

Necesito:

  1. Extraer números solo del archivo usando expresiones regulares

  2. Encuentra la sum de todos los números.

Usé regex para extraer todos los números. Estoy tratando de obtener la sum total de todos los números, pero solo estoy obteniendo la sum de cada línea que tenía números. He estado luchando con diferentes maneras de hacer esta tarea y esto es lo más cerca que he estado de hacerlo bien.

Sé que me faltan algunas partes clave, pero no estoy seguro de lo que estoy haciendo mal.

Aquí está mi código:

import re text = open('text_numbers.txt') for line in text: line = line.strip() y = re.findall('([0-9]+)',line) if len(y) > 0: print sum(map(int, y)) 

El resultado que obtengo es algo como esto (cada uno es una sum de una línea):

14151

8107

16997

18305

3866

Y debe ser una sum como esta (sum de todos los números):

134058

 import re import np text = open('text_numbers.txt') final = [] for line in text: line = line.strip() y = re.findall('([0-9]+)',line) if len(y) > 0: lineVal = sum(map(int, y)) final.append(lineVal) print "line sum = {0}".format(lineVal) print "Final sum = {0}".format(np.sum(final)) 

¿Es eso lo que estás buscando?

No sé mucho python pero puedo dar una solución simple. Prueba esto

 import re hand = open('text_numbers.txt') x=list() for line in hand: y=re.findall('[0-9]+',line) x=x+y sum=0 for i in x: sum=sum + int(i) print sum 

Mi primer bash de responder con el uso de expresiones regulares, me parece una gran habilidad para practicar, que es leer el código de otros.

 import re # import regular expressions chuck_text = open("regex_sum_286723.txt") numbers = [] Total = 0 for line in chuck_text: nmbrs = re.findall('[0-9]+', line) numbers = numbers + nmbrs for n in numbers: Total = Total + float(n) print "Total = ", Total 

y gracias a Beer por la ‘lista de comprensión’ de un transatlántico, aunque su ‘r’ no parece ser necesaria, no está seguro de lo que hace. Pero se lee a la perfección, me confunden más al leer dos lotes de bucles como mi respuesta

 import re print sum([int(i) for i in re.findall('[0-9]+',open("regex_sum_286723.txt").read())]) 
 import re text = open('text_numbers.txt') data=text.read() print sum(map(int,re.findall(r"\b\d+\b",data))) 

Usa .read para obtener contenido en formato de string

 import re sample = open ('text_numbers.txt') total =0 dignum = 0 for line in sample: line = line.rstrip() dig= re.findall('[0-9]+', line) if len(dig) >0: dignum += len(dig) linetotal= sum(map(int, dig)) total += linetotal print 'The number of digits are: ' print dignum print 'The sum is: ' print total print 'The sum ends with: ' print total % 1000 
 import re print sum([int(i) for i in re.findall('[0-9]+',open(raw_input('What is the file you want to analyze?\n'),'r').read())]) 

Puedes compactarlo en una sola línea, ¡pero esto es solo por diversión!

Aquí está mi solución a este problema.

 import re file = open('text_numbers.txt') sum = 0 for line in file: line = line.rstrip() line = re.findall('([0-9]+)', line) for i in line: i = int(i) sum += i print(sum) 

Los elementos de línea en primer lugar para bucle son las listas también y utilicé segundo para que el bucle convierta sus elementos a un entero desde una cadena, así que puedo sumrlos.

 import re fl=open('regex_sum_7469.txt') ls=[] for x in fl: #create a list in the list x=x.rstrip() print x t= re.findall('[0-9]+',x) #all numbers for d in t: #for loop as there a empthy values in the list a ls.append(int(d)) print (sum(ls))