在python中提取连续行之间的差异

2024-05-03 12:27:53 发布

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

我需要遍历一个文件的n行,并对1和{}之间的任何{}进行循环,以得到{}的单词之间的差异(例如line[i]word[j] - line[i+1]word[j]等)在

输入:

Hey there !
Hey thre !
What a suprise.
What a uprise.
I don't know what to do.
I don't know wt to do.

输出:

^{pr2}$

目标是只提取两个连续行单词之间的缺失字符。在

我是python新手,如果您能指导我编写代码,我会非常感谢您。在


Tags: 文件toline差异单词dowhatword
2条回答

你的例子表明你想要在一对线之间进行比较。这与将其定义为line(n-1)-line(n)不同,后者将给出5个结果,而不是3个。在

结果也取决于你认为的差异。它是位置性的,还是仅仅基于奇数行中缺失的字母,还是两者的差异都适用。
(例如“boat”-“tub”=“船”,“oa”或“oa”?)。
您还必须决定是否希望差异区分大小写。在

下面是一个例子,其中差异的计算集中在一个函数中,这样您可以更容易地更改规则。它假设“船”-“浴缸”=“非统组织”。在

lines = """Hey there !
Hey thre !
What a suprise.
What a uprise.
I don't know what to do.
I don't know wt to do.
""".split('\n')

def differences(word1,word2):
    if isinstance(word1,list):
        return "".join( differences(w1,w2) for w1,w2 in zip(word1+[""]*len(word2),word2+[""]*len(word1)) )
    return "".join( c*abs(word1.count(c)-word2.count(c)) for c in set(word1+word2) )

result = [ differences(line1.split(),line2.split()) for line1,line2 in zip(lines[::2],lines[1::2]) ]

# ['e', 's', 'ha']

注意,result的行处理基于您的示例(而不是您的定义)。

没有任何库:

def extract_missing_chars(s1, s2):
    if len(s1) < len(s2):
        return extract_missing_chars(s2, s1)
    i = 0
    to_return = []
    for c in s1:
        if s2[i] != c:
            to_return.append(c)
        else:
            i += 1
    return to_return

f = open('testfile')
l1 = f.readline()
while l1:
    l2 = f.readline()
    print(''.join(extract_missing_chars(l1, l2)))
    l1 = f.readline()

相关问题 更多 >