2024-07-03 06:19:00 发布
网友
好吧,我已经看了所有其他的问题,但我不太确定如何将我读到的代码应用到我的代码中,我也不确定它是否能起作用。所以我的文本文件是这样的:
NeQua,High, ImKol,Moderate, YoTri,Moderate, RoDen,High,
我的代码能够读取第一行代码并删除部分,但是当我为第二行添加搜索请求时,它就出现了一个错误。那我怎么让它读下一行呢?在
这是我目前掌握的代码:
我不太确定如何使用下一个函数。在
行:
with open ("clientIntensity.txt") as search:
创建一个名为search的文件对象。此文件对象具有many methods,但没有.next()方法。因此,调用.next()会抛出一个错误,内容大致是“您希望我做什么!?”。在
search
.next()
但是,你知道你想做什么,你想迭代每一行,你用一个for循环。for循环的美妙之处在于,在当前迭代结束时,它会自己继续到下一个迭代,直到到达结束为止(这个结束实际上是一个StopIteration)。在
StopIteration
所以,如果你只想继续下一行,就让for循环滚动吧!在
最后一个提示。如果您有一个像hello,there,这样的字符串,那么通过切片来提取{}是非常费劲的,但是通过使用string对象的方法,即.split()来提取{}。这允许您通过指定一个清除器来获取子字符串的列表。例如,'hello,there,'.split(',')给出了['hello', 'there', '']。然后您可以用'hello,there,'.split(',')[1]索引第二个单词,给出'there'!在
hello,there,
string
.split()
'hello,there,'.split(',')
['hello', 'there', '']
'hello,there,'.split(',')[1]
'there'
注意:split方法返回第三个元素的原因是字符串以逗号结尾,因此当以逗号分隔时,结尾处也会返回一个空字符串,但您可以忽略这一点。
您不需要调用next()。您已经在文件的行上迭代了,所以,不要做任何事情,下一行将在下一次迭代时出现。在
next()
elif clientid not in line: pass
与文件读取无关:你如果其他人没有意义。clientid in line要么为真,要么为假,因此有3个条件是没有意义的。只需将中间的elif全部删除即可`
clientid in line
elif
for循环已经为您调用了next。在
for
next
因为您正在读取一个csv文件(一个值由逗号分隔的文件),所以您应该使用csv模块,它会自动为您拆分每一行,因此您不必自己对每一行进行切片。在
csv
为了进一步帮助您,我还删除了全局变量,并使用参数传递将变量传递给另一个函数。我还删除了对main()的递归调用,并使用一个循环来重复搜索。如果输入空字符串(只需按enter键),它应该退出循环并完成程序。在
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")
行:
创建一个名为
search
的文件对象。此文件对象具有many methods,但没有.next()
方法。因此,调用.next()
会抛出一个错误,内容大致是“您希望我做什么!?”。在但是,你知道你想做什么,你想迭代每一行,你用一个for循环。for循环的美妙之处在于,在当前迭代结束时,它会自己继续到下一个迭代,直到到达结束为止(这个结束实际上是一个
StopIteration
)。在所以,如果你只想继续下一行,就让for循环滚动吧!在
^{pr2}$最后一个提示。如果您有一个像}是非常费劲的,但是通过使用}。这允许您通过指定一个清除器来获取子字符串的列表。例如,
hello,there,
这样的字符串,那么通过切片来提取{string
对象的方法,即.split()
来提取{'hello,there,'.split(',')
给出了['hello', 'there', '']
。然后您可以用'hello,there,'.split(',')[1]
索引第二个单词,给出'there'
!在注意:split方法返回第三个元素的原因是字符串以逗号结尾,因此当以逗号分隔时,结尾处也会返回一个空字符串,但您可以忽略这一点。
您不需要调用
next()
。您已经在文件的行上迭代了,所以,不要做任何事情,下一行将在下一次迭代时出现。在与文件读取无关:你如果其他人没有意义。
clientid in line
要么为真,要么为假,因此有3个条件是没有意义的。只需将中间的elif
全部删除即可`for
循环已经为您调用了next
。在因为您正在读取一个csv文件(一个值由逗号分隔的文件),所以您应该使用
csv
模块,它会自动为您拆分每一行,因此您不必自己对每一行进行切片。在为了进一步帮助您,我还删除了全局变量,并使用参数传递将变量传递给另一个函数。我还删除了对
main()
的递归调用,并使用一个循环来重复搜索。如果输入空字符串(只需按enter键),它应该退出循环并完成程序。在相关问题 更多 >
编程相关推荐