正在读取文本文件的下一行?

时间:2018-08-28 16:45:17

标签: python python-3.x line next

好吧,所以我看了所有其他问题,但是我不确定如何将我所阅读的内容应用于代码,也不确定是否可以使用。所以我的文本文件如下:

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

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

3 个答案:

答案 0 :(得分:3)

您不需要致电next()。您已经在文件的各行上进行迭代,因此,无需执行任何操作,下一行将在下一次迭代中出现。

elif clientid not in line:
    pass

与文件读取无关:if-elseif-else没有意义。 clientid in line是对还是错,所以具有3个条件没有任何意义。只需完全删除中间的elif`

答案 1 :(得分:2)

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

答案 2 :(得分:0)

该行:

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

创建一个名为search的文件对象。该文件对象具有many methods,但没有.next()方法。因此,致电.next()会引发“您要我做什么!?”的错误。


但是,您确实知道要执行的操作,想要遍历每行,并且正在使用for循环进行此操作。 for循环的优点在于,在当前迭代的末尾,它本身会继续进行下一个迭代,直到达到末尾为止(该末尾实际上是a 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方法返回的第三个元素的原因是字符串以逗号结尾,因此当以逗号分隔时,也会返回末尾的空字符串,但是您可以忽略它

相关问题