繁体   English   中英

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

[英]Looking for matching strings of length > 4 between two text files

我想在两个文本文件阅读,然后搜索各为两者之间共同的,最小长度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)

目前,该代码反复打印“ -----”和“ 55555”之类的字符串,并且似乎不会破坏循环(这些特定的字符串仅在lp出现一次)。 我也不相信它会找到只是重复相同字符的字符串。

如何将代码更改为:

  1. 仅使其运行并打印每个事件一次,并且
  2. 不仅找到重复的相同字符的字符串?

编辑:这是一些模拟文本文件。 其中,字符串“ ghtyty”在file1中出现3次,在file2中出现4次。 该代码应打印“ ghtyty”以进行一次控制台。

file1 file2

我建议使用另一种方法。 将文件拆分为单词,并保留不超过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

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

[x for x in db.split() if len(x) > 4 and x != x[0]*len(x)]

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM