我正在尝试编写一个python代码来匹配python中两个列表中的内容。
一个制表符分隔文件如下所示:
COPB2
KLMND7
BLCA8
而另一个file2有一长串相似的“名字”,如果你愿意的话。文件中应该有一些相同的匹配,我已成功识别并写入新文件。问题是当其中一个“名称”的末尾有其他字符时。例如,上面的COPB2
应与file2中的COPB2A
匹配,但事实并非如此。同样,KLMND7
应与KLMND79
匹配。我应该使用正则表达式吗?把它们变成字符串?任何想法都有帮助,谢谢!
到目前为止,在第一次回复之后我已经做了多少工作:
with open(in_file1, "r") as names:
for line in names:
file1_list = [i.strip() for i in line.split()]
file1_str = str(file1_list)
with open(in_file2, "r") as symbols:
for line in symbols:
items = line.split("\t")
items = str(items)
matches = items.startswith(file1_str)
print matches
当我知道应该有一些匹配时,此代码会返回False
。
答案 0 :(得分:2)
string.startswith()
无需正则表达式,如果它只是尾随字符
>>> g = "COPB2A"
>>> f = "COPB2"
>>> g.startswith(f)
True
这是一段代码:
file1_list = []
with open(in_file1, "r") as names:
for line in names:
line_items = line.split()
for item in line_items:
file1_list.append(item)
matches = []
with open(in_file2, "r") as symbols:
for line in symbols:
file2_items = line.split()
for file2_item in file2_items:
for file1_item in file1_list:
if file2_item.startswith(file1_item):
matches.append(file2_item)
print file2_item
print matches
大文件可能很慢。如果这是不可接受的,我可以尝试考虑如何优化它。
答案 1 :(得分:0)
如果您需要更通用的解决方案,可以查看difflib。请记住,这是一个很大的进口,有很多开销,所以只有在你真的需要时才使用它。这是另一个有点相似的问题。
https://stackoverflow.com/questions/1209800/difference-between-two-strings-in-python-php
答案 2 :(得分:0)
假设您将文件加载到列表X,Y。
中## match if a or b is equal to or substring of one another in a case-sensitive way
def Match( a, b):
return a.find(b[0:min(len(a),len(b))-1])
common_words = {};
for a in X:
common_words[a]=[];
for b in Y:
if ( Match( a, b ) ):
common_words[a].append(b);
如果要使用正则表达式进行匹配,则需要使用“单词匹配开头”运算符“^”。
import re
def MatchRe( a, b ):
# make sure longer string is in 'a'.
if ( len(a) < len(b) ):
a, b = b, a;
exp = "^"+b;
q = re.match(exp,a);
if ( not q ):
return False; #no match
return True; #access q.group(0) for matches