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

2024-09-28 23:23:52 发布

您现在位置: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: name 'total' is not defined


Tags: 文件nameintxttruefor字母line
3条回答

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()的it在空白处放入一个["25", "45", "23", "67"]字符串列表。map(func, iterable)将函数应用于iterable的所有元素,并返回它的生成器,该生成器由sum()求和:

"25 45 23 67" -> ["25", "45", "23", "67"] -> (25,45,23,67) -> 160

读数:

你的代码有错误。 首先,total没有初始化,您应该添加

total = 0

之后,迭代line将得到:

2
5
{space}
4
...

我想你应该分道扬镳,一个接一个地排到第一位:

for i in line.split(' '):
    total = total + int(i)
print(total)

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")

如果你想求和而不是串接,你应该把total初始化为total = 0,然后像这样加上line[i]

相关问题 更多 >