我正在开展一个学校项目,在那里我需要制作一个功能,可以按名称,流派,年份等用于搜索电影。我做了一个菜单,你可以选择1之类的命令,名称,类型,持久性,导演,主角,国家,年份的2,3,4,5,6或7。现在,我需要尽可能地创建功能,例如,选择1(名称),这样你就可以通过输入名称来搜索电影,结果你会得到(一个飞过杜鹃的巢|戏剧| 133 | Milos Forman | Jack Nicholson |美国| 1975年)。 我从这样的事情开始:
def name():
f = open("svi.txt","r")
l = []
for x in f.readlines():
n = x.strip().split("|")
name_m = n[0]
l.append(name_m)
如果这是正确的方法,我接下来该怎么办? 顺便说一句,所有电影都保存在我的txt文件中。
答案 0 :(得分:0)
你是在正确的道路上,虽然有很多更好的方法,但你应该先学习它以你的方式去做!现在函数名称应该有一个输入参数(这将是用户输入的搜索词),然后应该在刚刚创建的名称列表中搜索该名称('l')。然后你必须获得列表'l'中的电影名称索引,最后从列表中返回获取索引的元素:
`f.read().split()[index]`
以下代码用于名称功能:
def name(movie_name):
f = open("svi.txt","r")
l = []
for x in f.readlines():
n = x.strip().split("|")
name_m = n[0]
l.append(name_m)
index = 0
if movie_name in l:
index = l.index(movie_name)
else:
print("Error movie name not found")
return
z = f.read().split('\n')
print("Here are the movie details:")
print(z[index])
return
这样做的一个巧妙方法就是:
def name(movie_name):
with open("svi.txt",'r') as fh:
file = fh.read()
fh.close()
names = [ i.split('|')[0] for i in file.split('\n') ]
try:
return (file.split('\n')[names.index(movie_name)])
except:
return ("Name not found! No records of this movie!")
现在将函数调用为:
>>> print(name('One flew over cuckoo\'s nest'))
答案 1 :(得分:0)
如果文本文件中的某一行与line = "One flew over cuckoo's nest|Drama|133|Milos Forman|Jack Nicholson|USA|1975"
类似,那么line.strip().split("|")[0]
会为您提供"One flew over cuckoo's nest"
。
我会使用name()
语句重写with
函数,因为它会关闭文件。
def name(filename):
with open(filename) as f:
movies = [line.strip().split("|")[0] for line in f]
return movies
print(name("svi.txt"))
在处理文件对象时,最好使用with关键字。优点是文件在套件完成后正确关闭,即使在某个时刻引发了异常。