逐行读取文件,如果行以数字开头,则将所有这些数字添加到该行中

时间:2018-11-15 08:20:21

标签: python

我有一个像这样的.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”未定义

5 个答案:

答案 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()))的解释:

这会将整个linesplit()放在空白处,变成字符串列表["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")
  • 使用with十分方便,因为即使发生错误它也会为您关闭文件
  • isnumeric()isaplpha返回布尔值-无需另外针对True进行测试
  • 一种所谓的 list comprehension (在方括号中为单行循环)创建了一个列表,并允许在将每个值添加到列表中时对其进行处理;结果列表可以轻松地汇总和打印