如何读取文本文件并将组中的数字保存到python中的5个不同列表中

如何读取文本文件并将组中的数字保存到python中的5个不同列表中,python,Python,我有一个基本结构如下的文本文件: Transactions/Sec for Group = AA\CODE1\KB 100 200 300 400 500 Transactions/Sec for Group = AB\CODE2\KB 800 300 400 500 600 Transactions/Sec for Group = AC\CODE3\KB 400 300 500 600 700

我有一个基本结构如下的文本文件:

 Transactions/Sec for Group = AA\CODE1\KB

 100

 200

 300


 400


 500


 Transactions/Sec for Group = AB\CODE2\KB


 800


 300


 400


 500


 600


 Transactions/Sec for Group = AC\CODE3\KB


 400


 300


 500


 600


 700


 Transactions/Sec for Group = AD\CODE4\KB


 200


 200


 300


 400


 400
我想阅读每个小组,并将5个数字保存在5个不同的列表中。例如,阅读组1,创建列表1、列表2、列表3、列表4、列表5。阅读第二组,并将列表2中的数字“附加”到列表1、列表2、列表3、列表4、列表5中

这就是我所做的:

with open('Output.txt') as foutput:

    count = 0
    list1 = []
    list2 = []
    list3 = []
    list4 = []
    list5 = []
    for line in foutput:
        #print line
        count = count + 1

        if 'Group' in line:             
            key = line[line.index('=')+1:].strip()
            #f.write(key)
        else:   
            value = float(line.strip()) 
            list1 = value                                               
            ind += 1
            list2 = float(line.strip() + '\n')
代码不起作用,基本上我有一个列表中的5个数字,我需要在不同的列表中的每个数字

它不会给我任何错误,因为所有数字都在1个列表中(或在1个变量中,即值变量中)


谢谢您的帮助。

如果我们可以假设文件每次都是固定格式,我们可以这样做。我将使用dict而不是五个列表,并使用=后面的项作为键

f = open("Output.txt", "r")
lines = [line.rstrip() for line in f if line != "\n"] #Get all lines, strip newline chars, and remove lines that are just newlines.
lines.close()

NUM_LISTS = 5

groups = [[] for i in range(NUM_LISTS)] 
listIndex = 0 
for line in lines:
    if "Transactions/Sec for Group" not in line:
        groups[listIndex].append(float(line))
        listIndex += 1
        if listIndex == NUM_LISTS:
            listIndex = 0

不要忘记忽略空行。
.strip()
不会删除它们。所以,你必须使用一个条件来实现这一点

我这里有一个代码示例,它适合我(python2.7)

它打印:

{'AB\\CODE2\\KB': [800, 300, 400, 500, 600], 'AC\\CODE3\\KB': [400, 300, 500, 600, 700], 'AA\\CODE1\\KB': [100, 200, 300, 400, 500], 'AD\\CODE4\\KB': [200, 200, 300, 400, 400]}
如前所述,文件格式必须保持不变

编辑:如我所知,您必须使用这4个列表作为参数。您有两种选择:

  • 使用字典中的
    .items()
    ,该字典提供:

    [('AB\\CODE2\\KB', [800, 300, 400, 500, 600]), ('AC\\CODE3\\KB', [400, 300, 500, 600, 700]), ('AA\\CODE1\\KB', [100, 200, 300, 400, 500]), ('AD\\CODE4\\KB', [200, 200, 300, 400, 400])]
    
  • 然后,要将列表用作函数的参数,可以执行以下操作:
    lists.items()[0][1]、lists.items()[1][1]、lists.items()[2][1]和lists.items()[3][1]

  • 如果您更愿意,请在列表中使用词典的转换 与之相适应:

    list_of_lists = []
    for list_name in lists.keys():
        list_of_lists.append(lists[list_name])
    print list_of_lists
    
  • 它将为您提供:

    [[800, 300, 400, 500, 600], [400, 300, 500, 600, 700], [100, 200, 300, 400, 500], [200, 200, 300, 400, 400]]
    

    谢谢你的回答,我有个问题。我试图用5个不同的列表来实现这一点,因为我需要5个列表(5组数字)作为另一个进程的参数。如果我想单独使用这5个组,如何使用您的字典?是否要将列表作为参数传递?如果是这样的话,您可以通过执行groups[myCodeHere]来获取列表,它将吐出列表。它给了我一个错误:ValueError:invalid literal for int(),以10为基数:“1011.5032”。将对int的调用替换为对float的调用。从你发布的内容来看,我认为它们只会是整数。嗨@ollien,你的代码工作正常,但正在做我已经做过的事情。。。也许我没有解释清楚……我会再解释一遍。第一组有5个数字,我想在每个列表中添加每个数字。第一个数字附加到列表1,第二个附加到列表2,第三个附加到列表3,第四个附加到列表4,第五个附加到列表5。。。。当我读第二组时,第二组的第一个数字应该是列表1,第二个数字应该是列表2,第三个数字应该是列表3,等等…所以基本上列表1将有第一组1和第二组的第一个数字,和其他组一样..我想你的意思是在列表1中附加值,但不确定你打算在列表2和其他列表中添加什么。而且(line.strip()+“\n”)肯定不能转换为float,因为“\n”。@TrisNefzger我的意思是将每个数字附加到5个不同的列表中。从组1开始:编号1追加到列表1,编号2,追加到列表2,编号3追加到列表3,编号4追加到列表4,编号5追加到列表5。第二组中,第1个附加到列表1,第2个附加到列表2,第3个附加到列表3,等等…您的代码正在执行我正在执行的操作。基本上我需要的是:我有第1组和第5组号码,所以将第一组号码保存到列表中,第二组号码保存到第二个列表中,第三组号码保存到第三个列表中,第四组号码保存到第四个列表中,第五组号码保存到第五个列表中。当我读第2组时,第2组的第一个数字进入列表1,第二个数字进入列表2,第三个数字进入列表3。。。。等因此,列表1将有所有组的第一个编号,列表2将有所有组的第二个编号…..啊,好的。。现在更清楚了一点。:)你可以从字典中提取你想要的,但你已经接受了前面的答案,所以。。你有你想要的!祝您有个美好的一天。
    [[800, 300, 400, 500, 600], [400, 300, 500, 600, 700], [100, 200, 300, 400, 500], [200, 200, 300, 400, 400]]