如何从python中的两个文件中找到公共模式集?

2024-06-25 22:39:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我将文件1列为:

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

文件2列为:

- 
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

它忽略了ds , kje3 ,uy,pi,f

有人能帮忙吗


Tags: informypidsopenpolist
3条回答

您需要将行拆分为子字符串。('ds,kj,e3'为例)

尝试使用“get\u set\u of \u 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

这是因为在字符串的意义上,“ds,e3,kj”和“ds,kj,e3”是不相等的。 如果你需要比较这种类型的模式,把它们当作弦来对待,试着把它们按顺序排列,然后再比较

if ',' in line:
    line = ','.join(sorted(line.split(',')))

稍加修改的代码版本将产生所需的结果:

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可以flatten列表

结果:

-
qw
pi
kj
ds
po
e3
f
uy
we

相关问题 更多 >