读取文本文件的下一行?
Reading the next line of a text file?
好的,所以我已经查看了所有其他问题,但我不确定如何将我阅读的内容应用到我的代码中,而且我不确定它是否有效。所以我的文本文件看起来像这样:
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")
我不太确定如何使用下一个功能。
您不需要致电 next()
。您已经在遍历文件的行,所以,什么都不做,下一行将在下一次迭代时出现。
elif clientid not in line:
pass
与文件读取无关:你的if-elseif-else没有意义。 clientid in line
不是真就是假,所以有3个条件是没有意义的。把中间的 elif
全部去掉`
for
循环已经为您调用 next
。
由于您正在读取一个 csv 文件(一个值以逗号分隔的文件),您应该使用 csv
模块 - 它会自动为您拆分每一行,因此您不必对每一行进行切片你自己。
为了进一步帮助您,我还删除了全局变量并使用参数传递将变量传递给另一个函数。此外,我删除了对 main()
的递归调用并使用循环重复搜索。如果您输入空字符串(只需按回车),它应该退出循环并完成程序。
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")
行:
with open ("clientIntensity.txt") as search:
创建一个名为 search
的文件对象。此文件对象有 many methods,但没有 .next()
方法。因此调用 .next()
会沿着 "what do you want me to do!?".
的行抛出错误
但是,您确实知道自己想要做什么,您想要遍历每一行并且您正在使用 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 方法返回第三个元素的原因是字符串以逗号结尾,因此当以逗号分割时,最后也会返回一个空字符串,但是你可以忽略这个。
好的,所以我已经查看了所有其他问题,但我不确定如何将我阅读的内容应用到我的代码中,而且我不确定它是否有效。所以我的文本文件看起来像这样:
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")
我不太确定如何使用下一个功能。
您不需要致电 next()
。您已经在遍历文件的行,所以,什么都不做,下一行将在下一次迭代时出现。
elif clientid not in line:
pass
与文件读取无关:你的if-elseif-else没有意义。 clientid in line
不是真就是假,所以有3个条件是没有意义的。把中间的 elif
全部去掉`
for
循环已经为您调用 next
。
由于您正在读取一个 csv 文件(一个值以逗号分隔的文件),您应该使用 csv
模块 - 它会自动为您拆分每一行,因此您不必对每一行进行切片你自己。
为了进一步帮助您,我还删除了全局变量并使用参数传递将变量传递给另一个函数。此外,我删除了对 main()
的递归调用并使用循环重复搜索。如果您输入空字符串(只需按回车),它应该退出循环并完成程序。
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")
行:
with open ("clientIntensity.txt") as search:
创建一个名为 search
的文件对象。此文件对象有 many methods,但没有 .next()
方法。因此调用 .next()
会沿着 "what do you want me to do!?".
但是,您确实知道自己想要做什么,您想要遍历每一行并且您正在使用 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 方法返回第三个元素的原因是字符串以逗号结尾,因此当以逗号分割时,最后也会返回一个空字符串,但是你可以忽略这个。