Подсчет значений для каждой строки в текстовом файле python - PullRequest
0 голосов
/ 25 апреля 2018

Я думаю, что я близок к тому, что я пытаюсь получить, но я все еще начинающий, поэтому не знаю, лучший ли это путь. Допустим, у нас есть файл с сотнями строк, в конце каждой из которых есть значение, которое я хочу посчитать. Мне кажется сложным программировать все в одной строке кода, поэтому я предпочитаю идти шаг за шагом. Допустим, у нас есть файл со строками, подобными следующим:

Type of line 1: 10
Type of line 1: 5
Type of line 1: 15
Type of line 2: 50
Type of line 2: 25
Type of line 2: 5
Type of line 3: 1
Type of line 3: 14
Type of line 3: 2

Поскольку существует различный тип линий, я пытаюсь получить сумму этих значений, которые появляются в линии того же типа. Например, вывод должен быть таким:

Type of line 1: 30
Type of line 2: 80
Type of line 3: 17

Тип строки это просто строка.

Итак, чтобы достичь этого первым, я читаю файл построчно и разделяю каждую строку, используя символ «:». Затем я сохраняю эти разделенные строки в переменной для последующего вызова ее элементов и суммирую эти значения с помощью линии того же типа. Я знаю, что, поскольку это файл, в котором строки являются строками, для работы со значениями они должны рассматриваться как целые, поэтому это должно быть что-то вроде int (y [1]), но я не уверен. Любое предложение, нахожусь ли я на правильном пути? Вот что я попробовал до сих пор:

with open('file.txt','r') as f:
    for line in f:
        y = line.split(':')
        ...

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Это базовый ответ с использованием стандартных типов данных, возможно, это не самый эффективный способ сделать это, но он поможет вам изучить основы Python

Диктовка - хороший выбор для промежуточной структуры данных, так как вы не можете иметь несколько ключей с одним и тем же именем. Мы используем это для суммирования ваших строк

    output = dict()  

    with open("file_name", "r") as file:
        for line in file.readlines(): 
            line_name, value = line.split(":")
            value.strip()  # Strip the new line character
            if line_name in output.keys():  # Test to see if we see this line before
                output[line_name] += int(value)  #  augmented addition operator
            else:
                output[line_name] = int(value) # line not found assign basic value

    for key, value in output.items():  # format the output in the way you wanted
        print("The sum of %s is %s" % (key, value))

Выход:

The sum of Type of line 2 is 80
The sum of Type of line 1 is 30
The sum of Type of line 3 is 17
0 голосов
/ 25 апреля 2018

Вы можете использовать itertools.groupby для группировки строк по значению строки, а затем суммировать завершающие цифры каждой строки:

import itertools
import re
file_data = [i.strip('\n') for i in open('filename.txt')]
new_data = [[a, list(b)] for a, b in itertools.groupby(sorted(file_data, key=lambda x:re.findall('(?<=line\s)\d+', x)), key=lambda x:re.findall('(?<=line\s)\d+', x))]
final_results = ['Type of line {}: {}'.format(a, sum(int(re.findall('\d+$', i)[0]) for i in b)) for [a], b in new_data]

Выход:

['Type of line 1: 30', 'Type of line 2: 80', 'Type of line 3: 17']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...