代码之家  ›  专栏  ›  技术社区  ›  Des Grieux

Python中具有相同内容的2个文件中的2行的标识

  •  1
  • Des Grieux  · 技术社区  · 8 年前

    peach
    carrot
    apple
    lemon
    

    我想检查两条同时出现的线路是否相同。如果不是,则总相似度降低。由于这两个文件是相同的,检查身份应该会导致100%的相似性。相反,我得到了0%。

    from itertools import izip, izip_longest
    
    with open(r'file1.txt', "rb") as f1, open(r'file2.txt', "rb") as f2:
    
        #initialize numerator & denominator values for calculating file similarity
        nTotal = 4 #total number of lines in each file
        nIdent = nTotal
    
        for line1, line2 in izip_longest(f1, f2):
    
            if((line1 is line2) is False):
    
                nIdent -=1
    
        similarity = nIdent/nTotal
    

    为什么线条不一样?

    2 回复  |  直到 8 年前
        1
  •  4
  •   Zach Gates    8 年前

    line1 is line2 line1 == line2 . 对象是 相同,但它们所代表的数据是。

    equal_lines = 0
    
    with open(r'file1.txt', "rb") as f, open(r'file2.txt', "rb") as f2:
        for f1_line, f2_line in zip(f.readlines(), f2.readlines()):
            if f1_line == f2_line:
                equal_lines += 1
    
        2
  •  2
  •   user1785721 user1785721    8 年前

    你必须改变:

    if((line1 is line2) is False):
    

    签署人:

    if line1 == line2:
    

    string is 运算符,因为在大多数解释器实现中,相同的字符串表示为不同的对象 大多数时候

    操作员返回 True

    'abc' is 'abc' # True in CPython.
    

    操作员有)。

    推荐文章