【问题标题】:Python - compare files with header field by fieldPython - 逐字段比较文件与标题字段
【发布时间】: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()

WITH PARAMS - I get NO Results

NO PARAMS - I GET Results

【问题讨论】:

  • 这真的是你的代码吗?因为如果你在没有两个参数的情况下调用lineNumber,Python说你试图调用一个带有两个零参数的函数,然后退出。此外,您的filea.close()fileb.close() 将导致错误,因为fileafileb 甚至都不存在于with 子句之外。换句话说:您向我们展示了与您的问题无关的内容,或者您​​忘记提及您的程序因错误消息而取消。
  • @MarcusMüller 感谢您花时间看这个.. 我可以向你保证,我可以在我的 CYWIN 上使用 python 2.7.10 调用该函数而无需参数.. 是的,这是我的代码(错过了在开始时导入 csv,正如其他人在下面指出的那样,有一个错字)。对于未来,如果可以的话,我建议您对您的评论不那么苛刻,更具建设性。还是谢谢
  • 对不起,如果我遇到了苛刻的问题,但这些是 python 会抛出的无可争辩的错误;如果您的代码没有产生这些错误,则说明您不小心运行了超出您想象的其他代码。
  • 真的,TypeError: lineNumber() takes exactly 2 arguments (0 given) 就像我说的,如果在没有参数的情况下调用 lineNumber
  • 添加声称您正在运行相同代码的文本屏幕截图无济于事,但会使您的问题更难理解。

标签: python dictionary compare


【解决方案1】:

您可能有错字。尝试改变

if lineNumber(file, fileb):

if lineNumber(filea, fileb):

【讨论】:

  • 嘿@Craig 感谢您指出我的错字,但不幸的是没有区别:(
  • 这没有什么区别,因为看起来您正在查看的代码与您正在执行的代码无关。对不起!
【解决方案2】:

我发现了问题。我已经更新了上面的代码。谢谢大家

【讨论】:

    猜你喜欢
    • 2012-06-15
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多