如何读取文本文件并将组中的数字保存到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]]