我有一个电影标题列表和一个名称列表。
电影:
名称:
我想为所有与名称列表中的名称匹配的电影制作一个新列表。
我曾尝试在Python中执行此操作,但由于某种原因,它无法正常工作。结果文件为空。
with open("movies.csv", "r") as movieList:
movies = movieList.readlines()
with open("names.txt", "r") as namesToCheck:
names = namesToCheck.readlines()
with open("matches.csv", "w") as matches:
matches.truncate(0)
for i in range(len(movies)):
for j in range(len(names)):
if names[j].lower() in movies[i].lower():
matches.write(movies[i])
break
matches.close();
我在这里想念什么?
答案 0 :(得分:1)
未获得任何结果的原因很可能是,当您在Python中的文件上调用readlines()
时,它会为您提供每行的列表,并附有换行符\n
结束。因此,您的程序将检查"roger\n"
是否在电影文件中的一行中,而不仅仅是"roger"
。
要解决此问题,您只需在[:-1]
语句中添加if
即可仅检查名称,而不检查换行符:
if names[j].lower()[:-1] in movies[i].lower():
您还可以通过使用read().splitlines()
来消除换行符,从而更改读取名称文件的方式,如下所示:
names = namesToCheck.read().splitlines()
答案 1 :(得分:1)
这有效....
Movies="""Independence Day
Who Framed Roger Rabbit
Rosemary's Baby
Ghostbusters
There's Something About Mary
"""
Names="""Roger
Kyle
Mary
Sam"""
with StringIO(Movies) as movie_file:
movies=[n.strip().lower() for n in movie_file.readlines()]
with StringIO(Names) as name_file:
names=[n.strip().lower() for n in name_file.readlines()]
for name in names:
for film in movies:
if film.find(name) is not -1:
print("{:20s} {:40s}".format(name,film))
输出:
陷害罗杰兔子的罗杰
玛丽·罗斯玛丽的宝贝
玛丽关于玛丽的一些事情