在两个文本文件之间寻找长度> 4的匹配字符串

Sou*_*ape 0 python

我正在尝试读取两个文本文件,然后搜索每个文本文件中最常长度为5的字符串.

我写的代码:

db = open("list_of_2","r").read()
lp = open("lastpass","r").read()

word = ''
length = 0

for dbchar in db:
    for lpchar in lp:
        if dbchar == lpchar:
            word += str(dbchar)
            length += 1
        else:
            length = 0
            word = ''
        if length > 4:
            print(word)
Run Code Online (Sandbox Code Playgroud)

代码当前一遍又一遍地打印像'-----'和'55555'这样的字符串,似乎没有打破循环(这些特殊的字符串只出现lp一次).我也不相信这是找到字符串,一样的角色重复.

如何将代码更改为:

  1. 只让它贯穿并打印每次出现一次,然后
  2. 不只是找到重复相同字符的字符串?

编辑:这是一些模拟文本文件.在这些中,字符串'ghtyty'在file1中出现三次,在file2中出现4次.代码应该打印'ghtyty'一次到控制台.

file1 file2

bus*_*ear 5

我建议采用不同的方法.将文件拆分为单词并仅保留5个字符或更大的单词.使用集合来查找交叉点 - 这会更快.

db_words = set([x for x in db.split() if len(x) > 4])
lp_words = set([x for x in lp.split() if len(x) > 4])

matches = db_words & lp_words
Run Code Online (Sandbox Code Playgroud)

如果要排除所有相同字符的单词,可以像这样定义列表解析:

[x for x in db.split() if len(x) > 4 and x != x[0]*len(x)]
Run Code Online (Sandbox Code Playgroud)

如果您要查找匹配的任何连续字符序列,这可能会更好:

i_skip = set()  # characters to skip if they are already in a printed word
j_skip = set()

for i in range(len(db)-4):
    if i in i_skip: continue
    for j in range(len(lp)-4):
        if j in j_skip: continue
        if db[i] == lp[j]:
            word_len = 5
            while db[i:i+word_len] == lp[j:j+word_len]:
                if db[i:i+word_len+1] == lp[j:j+word_len+1]:
                    word_len += 1
                else:
                    print(db[i:i+word_len])
                    i_skip.update(range(i, i+word_len))
                    j_skip.update(range(j, j+word_len))
                    break
Run Code Online (Sandbox Code Playgroud)