Как я могу объединить строки в текстовом файле? - PullRequest
1 голос
/ 25 марта 2019

У меня есть текстовый файл, который выглядит следующим образом:

100 Spam
250 Spam
50  Spam
20  Eggs
70  Eggs

Теперь я хочу объединить строки в новый файл, чтобы он выглядел так:

300 Spam
90  Eggs

Я прочитал файл построчно в список.Теперь я зацикливаюсь на каждом элементе в списке следующим образом:

new_list = []
j = 1
for i in range(len(old_list)):
       new_list.append("")
       if old_list[i][4:] == old_list[i-j][4:]:
          new_list[i-j][:4] = str(int(old_list[i][:4].strip()) + int(old_list[i-j][:4].strip())).ljust(4)
          new_list[i-j][4:] = old_list[i-j][4:]
          j += 1
       else:
          new_list[i-j] = old_list[i-j]

Я сталкиваюсь с 2 проблемами с этим:

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

Я новичок в программировании, так что, может быть, есть лучший способ подойти к проблеме все вместе?

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

Попробуйте это:

file = open("file.txt", "w+")
input = file.read().split("\n")

output = {}
for line in input:
    line = line.split(" ")
    if line[1] in output:
        output[line[1]] += int(line[0])
    else:
        output[line[1]] = int(line[0])

for line in output:
    file.write(line + " " + str(output[line]) + "\n")
0 голосов
/ 25 марта 2019
result = {}

with open("your_file.txt") as infile:
    for line in infile:
        amount, food_item = line.split()
        result[food_item] = result.get(food_item, 0) + int(amount)

print(result)  # {'Spam': 400, 'Eggs': 90}

Затем вы можете записать result в новый файл

with open("some_other_file.txt") as outfile:
    for food_item, amount in result.items():
        outfile.write(f"{amount} {food_item}\n")
0 голосов
/ 25 марта 2019

это решение весьма ограничено вводом, который вы представили.В качестве первого наивного подхода я бы разделил задачу на 3 части:

  1. Разобрать входные данные в список кортежей.Прочитайте ввод и создайте old_list, где каждый элемент является кортежем (значение, ключ)
old_list = [(100, 'Spam'), (250, 'Spam'), (50, 'Spam'), (20, 'Eggs'), (70,'Eggs')]
Пройдите по старому списку и создайте подсказку для накопления результата.
result = {}
    for elem in old_list:
        if elem[1] in result:
            result[elem[1]] += elem[0]
        else:
            result[elem[1]] = elem[0]

Для каждого элемента в old_list, если вы уже видели элемент с тем же ключом, суммируйте его значенияи продолжай.В противном случае добавьте ключ к результату dict с текущей стоимостью.

Пройдите проверку и запишите файл.
result = {'Spam': 400, 'Eggs': 90}

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...