Python difflib 它在列表上如何工作?

Python difflib How it works on list?

我是 Python 的新手。我写了一个简单的脚本来打开一个文件,并使用一个函数将一些行附加到 generator 对象。然后我使用这个对象与另一个以相同方式读取的文件有所不同。我收到以下错误:

unhashable type: 'list'.

为了改变我正在使用 difflib

你能解释一下为什么我会收到这个错误吗?我已经看到如何将 difflibf.readlines() 一起使用,但我不明白,因为 f.readlines() 也是 returns 一个列表。

#! /usr/bin/python

import difflib

def lineExtractor(file):
    lines = []
    for line in file:
        if line.startswith('g'):
            if lines:
                yield lines
                lines = []
        else:
            lines.append( line )
    if lines:
         yield lines

with open('testfile1.txt') as file1:
    lines1 = lineExtractor(file1)
    with open('testfile2.txt') as file2:
        lines2 = lineExtractor(file2)
        for line in difflib.unified_diff(lines1, lines2, fromfile='file1', tofile='file2', lineterm='', n=0):
                print line

谢谢

问题是 unified_diff 需要字符串列表作为输入。你给它一个发电机。这个生成器甚至不生成字符串,它生成字符串列表。

所以我们需要做两个改变:

首先,

lines1 = lineExtractor(file1)

变成

lines1 = list(lineExtractor(file1))

显然,lines2也需要做同样的事情。

其次,

yield lines

变成yield ''.join(lines).