在混合的数据列表中求和

时间:2012-12-01 21:03:39

标签: python arrays list append

这是一个特定的问题,可以帮助我完成一个外向项目。这很简单,我对Python很新,我的背景主要是艺术。我喜欢它,但我发现它也非常具有挑战性。

我有一个包含数字/名称列表的文本文件(Data.txt),如下所示(简短示例):

String 1
34.6
45.6
45.9
String 2
34.6
45.6
45.9  

这是一个混合列表。在每个字符串之后......跟随12个数字,依此类推。请注意,这些数字是“浮动”。

我设计了这个:

numberList = []
data = []
data = open("SalesData.txt").read().split()
for i in data:
        numberList.append(i)
print numberList

这将附加并打印外部.txt列表中的所有数据。如何在新列表(numberList)中获取所有数据,但不包括通过读取文件找到的所有“字符串”。这样,我只能执行数字总和---

6 个答案:

答案 0 :(得分:2)

首先,您不应该对您的文件执行.read().split() - 这将在任何空格上分割,而不仅仅是在换行符上。幸运的是,Python可以直接遍历文件。

然后,你可以尝试将每一行转换为一个浮点数,只有当它工作时才将它附加到列表中(否则跳过它)。此外,您可以立即将其转换为浮点数 - 使其总结起来更容易。

number_list = []
with open("SalesData.txt") as myfile:
    for line in myfile:
        try:
            number_list.append(float(line))
        except ValueError:
            pass
print(sum(number_list))

答案 1 :(得分:1)

只是遍历这些行,只将数字添加到列表中......

with open("somefile.txt") as f:
     my_list = []
     for line in f:
         try:
            my_list.append(float(line))
         except ValueError:
             pass

print sum(my_list)

答案 2 :(得分:1)

如果您的数据是结构化的(似乎就是这种情况),我只需使用一个计数器并删除每个len 12序列的第一个元素。

以下是一个例子:

numberList = []
data = []
counter = 0
with open("SalesData.txt") as myfile:
    for line in myfile:
        if counter > 0:
            number_list.append(float(line))
        counter = (counter + 1) % 12
print numberList

答案 3 :(得分:0)

试试这个:

tsum = []
for j in numberList:
    try: tsum.append(float(j))
    except: pass
sum = sum(tsum)

答案 4 :(得分:0)

您可以进行类型检查,或者如果数字实际上是字符串中的数字,您可以执行类似"13".isdigit()检查的操作,但我可能想要做一些更聪明的事情:

numberList = []

for i in range(0, len(data)/13):
    numberList.append(data[1*(i+1):13*(i+1)])

那个(或类似的东西)应该以字符串后面的数字组为目标。这取决于您的输入数据不是垃圾,但它应该比大型数据集更快地执行.isdigit()或其他类型检查。

答案 5 :(得分:0)

import re

ss =  '''String 1 
34.6 
45.6 
45.9 
String 2 
34.6 
45.6 
45.9 

'''

print re.findall('^(?!.*?[a-zA-Z])[0-9.+-]+',ss,re.MULTILINE)

但是如果可以有没有ASCII的字母,那么它将不起作用