我是新手,无法搜索我的确切问题。虽然对你们许多人来说可能很简单,但对我来说这肯定是一个充满恶化的碗。所以,这是......
我有一个包含列和行的文本文件。列是字符串,行是数字。
EXAMPLE: text file.
Line 1: a.1 2.g 2.2 b.3
Line 2: --------------------
Line 3: 1 2 4 1
Line 4: 3 3 1 1
Line 5: 2 1 5 8
我需要阅读文本文件并做一些简单的数学运算。 1.总和3,4,5。
最终结果如下:
FINAL
Line 1:
Line 2:
Line 3: 8
Line 4: 8
Line 5: 16
这是我到目前为止所拥有的......
files = open("exam-grades.txt", "r")
line_number = 1
for line in files:
if (line_number == 1 or line_number == 2):
continue
else:
sum = 0
numbers = line.split("\t")
for n in numbers:
sum = sum + float(n)
print "Line #: %d / Sum is %d ."%(line_number,sum)
line_number = line_number + 1
答案 0 :(得分:4)
line_number
最初为1,因此它会在不增加if
的情况下点击第一个continue
语句和line_number
,因此对每一行执行相同的操作,并且不会#39; t处理其中任何一个。
您可以通过更换循环顶部来纠正此问题:
for line in files:
if line_number>=3:
sum = 0
...
答案 1 :(得分:2)
with open("exam-grades.txt", "r") as f:
for i, line in enumerate(f, start=1):
if i >= 3:
l = line.split()
print l[0], l[1], sum((int(i) for i in l[2:] if i.isdigit()))
这里的逻辑非常简单,您可以在1
开始的文件中枚举行。
检查行号是3
还是更大,将行拆分为列表并验证列表元素是否可以转换为int
,如果可能我们将其汇总并打印出来。
答案 2 :(得分:1)
我会尝试使其更灵活一点 - 即我们不会总结至少一个值不能转换为浮点数/数字的行的数字:
def to_number(s):
try:
return float(s)
except ValueError:
return None
def sum_in_line(s):
sm = 0
cols = s.split()
try:
return sum(to_number(x) for x in cols)
except TypeError:
return ''
with open("exam-grades.txt", "r") as f:
i = 1
for line in f:
print('%4d:\t%s' % (i, sum_in_line(line)))
i += 1
输入数据:
a.1 2.g 2.2 b.3
--------------------
1 2 4 1
3 3 1 1
2 1 5 8
1 a Z 12
输出:
1:
2:
3: 8.0
4: 8.0
5: 16.0
6:
答案 3 :(得分:0)
1)使用pass
代替continue
,如果您使用continue
line_number
将不会更新
2)使用first_part, numbers = line.split(':');numbers = number.split()
获取数字。
因为如果你试图获得像你那样的数字,它将会失败:
>>> sum = 0
>>> line="Line 3: 1 2 4 1"
>>> numbers = line.split("\t")
>>> numbers
['Line 3:', '1', '2', '4', '1']
>>> for n in numbers:
... sum = sum + float(n)
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ValueError: could not convert string to float: Line 3:
你应该跳过第一个元素'Line 3:'
。
试试这个:
files = open("exam-grades.txt", "r")
line_number = 1
for line in files:
if (line_number == 1 or line_number == 2 or line_number == 3):
print "Line %d:" % line_number
pass
else:
sum = 0
first_part, numbers = line.split(":")
for n in numbers.split():
sum = sum + float(n)
print "Line %d: Sum is %d" % (line_number,sum)
line_number = line_number + 1
答案 4 :(得分:-1)
对我来说似乎有点像正则表达式,这取决于数字的复杂性......在本例中,我将“data”作为输入数据的通用迭代器:
sudo apt-get install libpq-dev python-dev libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev libffi-dev