Я пытаюсь добавить цифры, читая файл.

В файле есть тексты и цифры, поэтому мне нужны только цифры и добавить их для отображения итогов.

Это всегда показывает значение как ноль. Не знаю, где я делаю неправильно.

Вот код:

import re
file1 = open('Actual.txt')
line = file.read().rstrip()
numlist = list()
for line in file1:
    list = re.findall(r'[0-9.]+',line)
    if len(list)>0:
        num = int(list)
        numlist.append(num)
total = 0
for sum in numlist:
    total += sum
print (total)
0
Arun.K 14 Дек 2015 в 09:08

3 ответа

Лучший ответ

Это может помочь вам:

import re
file1 = open('so.txt')

numlist = list()
for line in file1:
    line_list = re.findall(r'[0-9.]+',line)
    if len(line_list) > 0:
        numlist.extend(line_list)

print numlist
total = 0
for sum in numlist:
    total += int(sum)
print (total)
1
abhinav kumar 14 Дек 2015 в 06:20

Имея дело со списками вещей, вы часто можете сделать всю работу одним махом. re.findall найдет все в файле и sum суммирует их все после преобразования в int. Итак, с небольшим количеством кода отладки для создания тестового файла вы можете:

import re

# todo: debug - generate a test file
open('Actual.txt', 'w').write("""ddenww123 4enale 56asdfr
7 lakjer 8910 222

""")

with open('Actual.txt') as fp:
    total = sum(int(val) for val in re.findall(r'\d+', fp.read()))    
print(total)
0
tdelaney 14 Дек 2015 в 06:25

Есть пара ошибок - я использовал ast.literal_eval для преобразования strings в int (int функция, т.е. int(list))) Попробуйте что-то вроде:

import re,ast
file1 = open(r"C:\Actual.txt")
numlist = list()
for line in file1:
    lst = re.findall(r'[0-9.]+',line)
    if len(lst)>0:
        num = [ast.literal_eval(i.strip()) for i in lst]# or use [int(i.strip()) for i in lst]
        numlist=numlist+num
total = 0
for sum in numlist:
    total += sum
print (total)
0
SIslam 14 Дек 2015 в 06:28