Как найти общий набор шаблонов из двух файлов в Python? - PullRequest
1 голос
/ 11 марта 2019

У меня есть file1, указанный как:

- 
er
we
ds,e3,kj
uy,mn
po
qw
pi
pi,f

File2, указанный как:

- 
df
we
wr
f,pi
ds,kj,e3
rt,uy
qw
po

Я попробовал следующий код, но он не работает должным образом: -

my_set1 = set(x.strip() for x in (open('file1').readlines()))
print(my_set1)
my_set2 = set(x.strip() for x in (open('file2').readlines()))
print(my_set2)

my_list=list((set(my_set1).intersection(set(my_set2))))
print(my_list,"\n")

with open('common_signals','w') as file3:
    for signal in my_list:
        file3.write("%s\n" %signal)

Выходные данные, которые я получаю внутри общих сигналов: - po ,we ,qw.

В нем есть NEGLECTED ds , kj и e3 ,uy,pi,f.

Может кто-нибудь помочь в этом?

Ответы [ 3 ]

0 голосов
/ 11 марта 2019

Слегка измененная версия вашего кода даст желаемый результат:

my_set1 = sum([x.strip().split(',') for x in open('file1').readlines()],[])
print(my_set1)

my_set2 = sum([x.strip().split(',') for x in open('file2').readlines()],[])
print(my_set2)

my_list=list((set(my_set1).intersection(set(my_set2))))
print(my_list,"\n")

with open('common_signals','w') as file3:
    for signal in my_list:
        file3.write("%s\n" %signal)

Вам нужно разделить каждый элемент списка, а затем, используя sum, вы можете сгладить список.

Результат:

-
qw
pi
kj
ds
po
e3
f
uy
we
0 голосов
/ 11 марта 2019

Это потому, что по смыслу строки «ds, e3, kj» и «ds, kj, e3» не равны. Если вам нужно скомпилировать шаблоны такого типа, рассматривая их как строки, попробуйте затем упорядочить их и сравнить после.

if ',' in line:
    line = ','.join(sorted(line.split(',')))
0 голосов
/ 11 марта 2019

Вам нужно разбить строки на подстроки. ('ds, kj, e3' в качестве примера)

Попробуйте использовать метод get_set_of_words.

Метод возвращает набор, который вы можете использовать для пересечения.

def get_set_of_words(file_name):
    result = set()
    with open(file_name) as f:
        lines = [w.strip() for w in f.readlines()]
        for line in lines:
            words = line.split(',')
            for word in words:
                result.add(word) 
    return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...