Python 3.x 如何合并文本文件中的行?

Python 3.x 如何合并文本文件中的行?,python-3.x,text,Python 3.x,Text,我有一个如下所示的文本文件: 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_li

我有一个如下所示的文本文件:

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]
现在我想将这些行合并到一个新文件中,如下所示:

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]
我把文件逐行读进一个列表。现在,我循环浏览列表中的每个项目,如下所示:

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行时,我也无法获得正确的总和,因为在循环中我覆盖了总和。我需要以某种方式储存这笔款项,但我想不出一种优雅的方式来储存这笔款项

  • 我是编程新手,所以也许有更好的方法来解决这个问题?

    此解决方案仅限于您提供的输入。 作为第一种天真的方法,我将问题分为三个部分:

  • 将输入解析为元组列表。 读取输入并创建
    旧列表
    ,其中每个元素都是一个元组(值、键)
  • old_list=[(100,'Spam')、(250,'Spam')、(50,'Spam')、(20,'Eggs')、(70,'Eggs')]
    
  • 检查旧列表并创建一个dict来累积结果
  • result={}
    对于旧列表中的元素:
    如果结果中的元素[1]:
    结果[elem[1]+=elem[0]
    其他:
    结果[elem[1]]=elem[0]
    
    对于
    old_list
    中的每个元素,如果您已经看到具有相同键的项,请将其值相加并继续。否则,使用当前值将键添加到结果dict

  • 把结果记录下来

  • 祝你好运

    此解决方案仅限于您提供的输入。 作为第一种天真的方法,我将问题分为三个部分:

  • 将输入解析为元组列表。 读取输入并创建
    旧列表
    ,其中每个元素都是一个元组(值、键)
  • old_list=[(100,'Spam')、(250,'Spam')、(50,'Spam')、(20,'Eggs')、(70,'Eggs')]
    
  • 检查旧列表并创建一个dict来累积结果
  • result={}
    对于旧列表中的元素:
    如果结果中的元素[1]:
    结果[elem[1]+=elem[0]
    其他:
    结果[elem[1]]=elem[0]
    
    对于
    old_list
    中的每个元素,如果您已经看到具有相同键的项,请将其值相加并继续。否则,使用当前值将键添加到结果dict

  • 把结果记录下来
  • 祝你好运

    试试这个:

    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")
    
    试试这个:

    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")
    
    然后您可以将
    结果
    写入一个新文件

    with open("some_other_file.txt") as outfile:
        for food_item, amount in result.items():
            outfile.write(f"{amount} {food_item}\n")
    
    然后您可以将
    结果
    写入一个新文件

    with open("some_other_file.txt") as outfile:
        for food_item, amount in result.items():
            outfile.write(f"{amount} {food_item}\n")