我有一个像这样的.txt文件
name John
25 45 23 67
name Ahmed
65 21 35
我想逐行读取此文件,并检查该行是否以字母或数字开头。如果该行以数字开头,则将所有这些数字加到该行中并打印总和。如果该行以字母开头,则只需打印任何消息即可。 我已经尝试过此代码
f=open(r"E:\test.txt","r")
for line in f:
if line[0].isnumeric()== True:
for i in line:
total = total + line[i]
print(total)
elif line[0].isalpha()==True:
print("line starts with alpha")
NameError:名称“ total”未定义
答案 0 :(得分:1)
total
未定义-您不需要它:
创建文件:
with open("k.txt","w") as f:
f.write("""name john
25 45 23 67
name ahmed
65 21 35
""")
处理文件:
with open("k.txt","r") as r:
for line in r:
if line and line[0].isdigit(): # no need to compare against True
print(sum(map(int,line.rstrip().split())))
else:
print(line.strip())
输出:
name john
160
name ahmed
121
sum(map(int,line.rstrip().split()))
的解释:
这会将整个line
,split()
放在空白处,变成字符串列表["25", "45", "23", "67"]
。 map(func, iterable)
将函数应用于可迭代的所有元素,并返回其生成器,该生成器由sum()
汇总:
"25 45 23 67" -> ["25", "45", "23", "67"] -> (25,45,23,67) -> 160
阅读:
答案 1 :(得分:0)
您的代码中有一些错误。
首先,total
未初始化,您应该添加
total = 0
之后,在line
上进行迭代将为您提供:
2
5
{space}
4
...
我想您想把这条线分开并一一得到:
for i in line.split(' '):
total = total + int(i)
print(total)
答案 2 :(得分:0)
Python解释器不知道如何执行total = total + line[i]
,因为total
未初始化。
例如,只需像这样初始化它(或在您认为合适的任何地方):
f=open(r"E:\test.txt","r")
for line in f:
if line[0].isnumeric()== True:
total=""
for i in line:
total = total + line[i]
print(total)
elif line[0].isalpha()==True:
print("line starts with alpha")
PS并且,如果您想对数字求和而不是字符串连接,则应将total
初始化为total = 0
,并像这样line[i]
那样添加total = total + int(line[i])
答案 3 :(得分:0)
使用map
将数字字符串解析为整数列表,并使用numpy
进行加法运算:
import numpy as np
f = open('test.txt','r')
for line in f:
if line[0].isnumeric():
print(np.sum(list(map(int, line.split()))))
elif line[0].isalpha():
print("line starts with alpha")
答案 4 :(得分:0)
与往常一样,有很多方法可以达到预期的效果。 我的方法是
with open('E:/test.txt', 'r') as f:
for line in f:
if line[0].isnumeric():
print(sum([int(d) for d in line.split()]))
elif line[0].isalpha():
print("line starts with a letter")
isnumeric()
和isaplpha
返回布尔值-无需另外针对True
进行测试