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

时间:2019-04-01 12:57:12

标签: python python-3.x

我需要循环遍历文件的n行,并为i1之间的任何n-1循环,以获得line(n-1) - line(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.

目标是仅提取两个连续行词之间的丢失字符。

我是python的新手,所以如果您能指导我编写代码,我将不胜感激。

2 个答案:

答案 0 :(得分:-1)

没有任何库:

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()

答案 1 :(得分:-1)

您的示例表明您要对线对进行比较。这与将其定义为line(n-1)-line(n)不同,后者将为您提供5个结果,而不是3个。

结果还取决于您认为与众不同之处。是位置性的,还是仅基于奇数行中丢失的字母,还是两个方向都适用的差异?
(例如“ boat”-“ tub” =“ boat”,“ oa”或“ oau”?)。
您还必须决定是否要使差异区分大小写。

在此示例中,差异的计算集中在一个函数中,以便您可以更轻松地更改规则。假定“ boat”-“ tub” =“ oau”。

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的行处理基于您的示例(而不是您的定义)。

相关问题