[英]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
出现一次)。 我也不相信它会找到不只是重复相同字符的字符串。
如何将代码更改为:
编辑:这是一些模拟文本文件。 其中,字符串“ ghtyty”在file1中出现3次,在file2中出现4次。 该代码应打印“ ghtyty”以进行一次控制台。
我建议使用另一种方法。 将文件拆分为单词,并保留不超过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.