python-3.x 阅读文本文件的下一行?

gab6jxml  于 2023-06-25  发布在  Python
关注(0)|答案(3)|浏览(148)

好了,我已经看了所有其他的问题,但我不确定如何将我所读到的应用到我的代码中,我不确定它是否有效。所以我的文本文件看起来像这样:

NeQua,High,
ImKol,Moderate,
YoTri,Moderate,
RoDen,High,

我的代码能够读取第一行并剪切部分,但当我添加第二行的搜索请求时,它就出现了错误。那么我如何让它读下一行呢?
这是我到目前为止的代码:

def main():
    global idin,clientid
    print("===================")
    print("=Activity Recorder=")
    print("===================")
    clientid=input("Please enter the client ID : ")
    print("")
    with open ("clientIntensity.txt") as search:
        for line in search:
            if clientid in line:
                idin=line[6:]#to extract high or moderate from the text
                idin=idin[:-2]
                print ("Intensity = ",idin)
                print("-",idin,"-")
                acti()
                break

            elif clientid not in line:
                search.next()
            else:
                print("Error")
                main()
def acti():
    global idin,clientid
    if idin == "High":
        print("Activites = Running, Swimming, Aerobics, Football, Tennis")
    elif idin == " Moderate ":
        print("Activities = Walking, Hiking, Cleaning, Skateboarding, Basketball")
    else:
        print("error 2")

我真的不太确定如何使用下一个功能。

ewm0tg9j

ewm0tg9j1#

您不需要调用next()。您已经在迭代文件的行,所以,不要做任何事情,下一行将在下一次迭代中出现。

elif clientid not in line:
    pass

与文件阅读无关:你如果-否则-否则没有意义。clientid in line要么为真,要么为假,所以有3个条件是没有意义的。只需将中间的elif完全删除`

eivnm1vs

eivnm1vs2#

for循环已经为您调用了next
因为你正在阅读一个csv文件(一个值用逗号分隔的文件),你应该使用csv模块--它会自动为你分割每一行,所以你不必自己对每一行进行切片。
为了进一步帮助您,我还删除了全局变量,并使用参数传递将变量传递给另一个函数。此外,我删除了对main()的递归调用,并使用循环来重复搜索。如果输入空字符串(只需按enter键),它应该退出循环并完成程序。

import csv

def main():
    print("===================")
    print("=Activity Recorder=")
    print("===================")

    while True:
        clientid=input("Please enter the client ID: ")
        print("")
        if not clientid:
             break
        with open ("clientIntensity.txt") as f:
            search = csv.reader(f, delimiter=',')
            for row in search:
                if row[0] == clientid:
                    idin = row[1]
                    print ("Intensity = ", idin)
                    acti(idin)
                    break
            else:
                print('ERROR: Not found')

def acti(idin):
    if idin == "High":
        print("Activites = Running, Swimming, Aerobics, Football, Tennis")
    elif idin == "Moderate":
        print("Activities = Walking, Hiking, Cleaning, Skateboarding, Basketball")
    else:
        print("ERROR: Unknown idin")
osh3o9ms

osh3o9ms3#

线路:

with open ("clientIntensity.txt") as search:

创建名为search的文件对象。这个文件对象有many methods,但没有.next()方法。因此,调用.next()会抛出一个类似“你想让我做什么??".
然而,你知道你想做什么,你想迭代每一行,你正在用for循环来做这件事。for循环的美妙之处在于,在当前迭代结束时,它自己继续进行下一次迭代,直到到达终点(这个终点实际上是StopIteration)。
因此,如果你只是想继续到下一行,只要让for循环滚动!

with open ("clientIntensity.txt") as search:
    for line in search:
        if clientid in line:
            idin=line[6:]#to extract high or moderate from the text
            idin=idin[:-2]
            print ("Intensity = ",idin)
            print("-",idin,"-")
            acti()
            break

最后一个提示。如果你有一个像hello,there,这样的字符串,那么通过切片来提取there需要花费很多精力,但是通过使用string对象的方法,即.split(),可以很容易地做到。这允许您通过指定定界符获得子字符串列表。例如,'hello,there,'.split(',')给出['hello', 'there', '']。然后你可以用'hello,there,'.split(',')[1]索引第二个单词,得到'there'

  • 注意:split方法返回第三个元素的原因是字符串以逗号结尾,因此当以逗号拆分时,结尾处也会返回一个空字符串,但您可以忽略这一点。

相关问题