【发布时间】:2016-08-21 09:16:52
【问题描述】:
我已经尝试了几天,但我仍然对为什么以下代码不起作用感到困惑和困惑。
该问题似乎与调用 lineNumber 函数时的 if 条件有关。该函数比较两个文件的长度并且工作正常(尝试过),但是当在 if 语句中调用时,嵌套代码将不再工作(仅供参考 - 对于每一行,内部代码比较两个文件中对应的字段值并打印出差异)。如果我在不传递 file1 和 file2 的情况下调用该函数(相当于根本不调用它),或者删除 if 条件,则代码有效。有人可以帮我吗?提前谢谢你
import csv
def lineNumber(file1, file2):
if len(list(file1)) == len(list(file2)):
return True
else:
return False
with open('filea.csv', 'rU') as filea, open('fileb.csv', 'rU') as fileb:
readera = csv.DictReader(filea)
readerb = csv.DictReader(fileb)
count = 0
for rowa,rowb in zip(readera, readerb):
if lineNumber(filea, fileb):
diff = [key for key in rowa if rowa[key] != rowb[key]]
count = count+1
for key in diff:
print "Line:", count,"Column:", key, ':', "Expected:",rowa[key], '->', "Actual:", rowb[key]
else:
print "The two files have different line number. Check sources"
filea.close()
fileb.close()
【问题讨论】:
-
这真的是你的代码吗?因为如果你在没有两个参数的情况下调用
lineNumber,Python会说你试图调用一个带有两个零参数的函数,然后退出。此外,您的filea.close()和fileb.close()将导致错误,因为filea和fileb甚至都不存在于with子句之外。换句话说:您向我们展示了与您的问题无关的内容,或者您忘记提及您的程序因错误消息而取消。 -
@MarcusMüller 感谢您花时间看这个.. 我可以向你保证,我可以在我的 CYWIN 上使用 python 2.7.10 调用该函数而无需参数.. 是的,这是我的代码(错过了在开始时导入 csv,正如其他人在下面指出的那样,有一个错字)。对于未来,如果可以的话,我建议您对您的评论不那么苛刻,更具建设性。还是谢谢
-
对不起,如果我遇到了苛刻的问题,但这些是 python 会抛出的无可争辩的错误;如果您的代码没有产生这些错误,则说明您不小心运行了超出您想象的其他代码。
-
真的,
TypeError: lineNumber() takes exactly 2 arguments (0 given)就像我说的,如果在没有参数的情况下调用lineNumber。 -
添加声称您正在运行相同代码的文本屏幕截图无济于事,但会使您的问题更难理解。
标签: python dictionary compare