这是一个特定的问题,可以帮助我完成一个外向项目。这很简单,我对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)中获取所有数据,但不包括通过读取文件找到的所有“字符串”。这样,我只能执行数字总和---
答案 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的字母,那么它将不起作用