Сравнение строк из двух файлов и вывод строки по частичному совпадению
У меня есть два файла: один файл содержит пути, второй файл содержит имена объектов.
Первый файл содержит пути и выглядит так:
Project_name\SubProjectName1\Subname1\Subname2\Subname3\object_name1\
Project_name\SubProjectName1\Subname1\Subname2\Subname3\object_name2\
Project_name\SubProjectName1\Subname1\Subname2\Subname3\object_name3\
Project_name\SubProjectName1\Subname1\Subname2\Subname3\object_name4\
Project_name\SubProjectName2\Subname1\Subname2\Subname3\object_name5\
Project_name\SubProjectName2\Subname1\Subname2\Subname3\object_name6\
Project_name\SubProjectName2\Subname1\Subname2\Subname3\object_name7\
Project_name\SubProjectName2\Subname1\Subname2\Subname3\object_name8\
Второй файл содержит в себе нужные object_name
object_name1
object_name3
object_name5
object_name7
Мне нужно перебрать оба файла и вывести только те строки из первого файла с путями, в которых содержатся строки с object_name из второго файла.
Перебор через
with open(path_file, 'r') as f1, open(object_file, 'r') as f2:
for x, y in zip(f1, f2):
f = open(test, 'a')
f.write("{0}\n{1}\n".format(x.strip(), y.strip()))
не работает, т.к. zip перебирает по наименьшему количеству строк в файле и останавливается.
Найти совпадающие строки через
data = open(path_file, 'r')
for row in data:
if object_data in row:
n = open(test, 'a')
n.write(row)
data.close()
тоже не выходит, так файл object_name полностью является строкой.
Также пробовал разбивать оба файла на списки и искать совпадения.
Если разбивать object_file.split('\n') и path_file.split('\n'), то поиск по частичному совпадению не происходит.
Если разбивать object_file.split('\\') и path_file.split('\\'), то происходит только поиск совпавшего элемента.
Как можно сравнить оба эти файла построчно и вывести только нужные мне строки?
Ответы (2 шт):
Вот вывод совпадений:
with open(path_file, "r") as f1, open(object_file, "r") as f2:
confirmed_paths = []
paths = f1.readlines()
objects = f2.readlines()
for path in paths:
for object_name in objects:
if object_name.strip() in path.strip():
confirmed_paths.append(path)
break
print(confirmed_paths)
решение с помощью регулярки (результат выводим в файл):
from re import search
with open(path_file) as f1, open(object_file) as f2, open(test,'a') as f3:
pat = f2.read().replace('\n','|')
for i in f1.readlines():
if search(pat, i):
f3.write(i)