Python difflib 它在列表上如何工作?
Python difflib How it works on list?
我是 Python 的新手。我写了一个简单的脚本来打开一个文件,并使用一个函数将一些行附加到 generator
对象。然后我使用这个对象与另一个以相同方式读取的文件有所不同。我收到以下错误:
unhashable type: 'list'.
为了改变我正在使用 difflib
。
你能解释一下为什么我会收到这个错误吗?我已经看到如何将 difflib
与 f.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)
.
我是 Python 的新手。我写了一个简单的脚本来打开一个文件,并使用一个函数将一些行附加到 generator
对象。然后我使用这个对象与另一个以相同方式读取的文件有所不同。我收到以下错误:
unhashable type: 'list'.
为了改变我正在使用 difflib
。
你能解释一下为什么我会收到这个错误吗?我已经看到如何将 difflib
与 f.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)
.