我有一张电影片名和一张名字的清单。
电影:
姓名:
我想要做一个新的列表,所有的电影,匹配的名字,从名称列表。
我尝试过用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();
我在这里错过了什么?
发布于 2019-07-18 18:08:42
您没有得到任何结果的原因很可能是,当您在Python中的文件上调用readlines()
时,它会给出每一行的列表,并在末尾附加一个换行符\n
。因此,您的程序将检查"roger\n"
是否位于电影文件中的一行中,而不仅仅是"roger"
。
要解决这个问题,只需将一个[:-1]
添加到if
语句中,只检查名称,而不检查换行符:
if names[j].lower()[:-1] in movies[i].lower():
还可以通过使用read().splitlines()
删除换行符,改变读取名称文件的方式,如下所示:
names = namesToCheck.read().splitlines()
发布于 2019-07-18 18:11:27
这很管用..。
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))
输出:
陷害罗杰兔子的罗杰
玛丽迷迭香的孩子
玛丽,关于玛丽的一些事情
https://stackoverflow.com/questions/57104459
复制