У меня есть список названий фильмов и список имен.
Фильмы:
Имена:
Я хочу создать новый список всех фильмов, которые соответствуют имени из списка имен.
Я пытался сделать это на 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();
Что мне здесь не хватает?
Пожалуйста, выложите пример ваших файлов.






Причина, по которой вы не получаете никаких результатов, вероятно, заключается в том, что когда вы вызываете readlines() для файла в Python, он дает вам список каждой строки с символом новой строки \n, прикрепленным к концу. Поэтому ваша программа будет проверять, находится ли "roger\n" в строке файлов фильмов, а не просто "roger".
Чтобы исправить это, вы можете просто добавить [:-1] к своему оператору if, чтобы проверять только имя, а не новую строку:
if names[j].lower()[:-1] in movies[i].lower():
Вы также можете изменить способ чтения файла имен, используя read().splitlines(), чтобы избавиться от символа новой строки, например:
names = namesToCheck.read().splitlines()
Это работает ....
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))
Выход:
Роджер, который подставил кролика Роджера
ребенок Мэри Розмари
Мэри есть что-то о Мэри
Ваш код работает для меня. Вы пробовали распечатать
moviesиnamesи посмотреть, являются ли они правильными списками?