【问题标题】:Comparing Files recursively in Python在 Python 中递归比较文件
【发布时间】:2013-07-06 04:52:51
【问题描述】:

我有一个用 Python 编写的代码。它基于变量“i”生成两个文件。现在,我需要将这两个生成的文件之一与密钥文件进行比较,以获得正确的 'i' 值。

我正在使用 FOR 循环来测试 'i' 的一系列值,并使用 filecmp.cmp 将生成的文件之一与密钥文件进行比较。在我找到匹配项的那一刻,这意味着我有正确的 'i' 值。

下面是一段代码:

for i in range(100,0,-1):

....

    with open("file1", "w") as p, open("file2", "w") as q:
        # generate data based on the value of i and write it to the files

    if(filecmp.cmp("file1", "keyfile"))
            print "%d is the correct value of it" % i
            break

应该这样工作:

  1. 测试 'i' 的值从 100 到 0 逐一递减。
  2. file1 和 file2 是使用基于“i”值的代码生成的。
  3. 现在,我将file1 与密钥文件进行比较。如果它们具有相同的内容,我会找到正确的键并打破 FOR 循环。

我已将 filecmp.cmp 语句放在 if 语句中,因为如果两个文件相等,它会返回一个布尔值 True。但是,当我运行代码时,此行会引发错误。

另外,这是正确的做法吗?每次执行 FOR 循环,都会生成两个文件,file1 和 file2。 With 语句将在循环后关闭这两个文件。但是在下一次循环运行中,这两个文件会被新内容覆盖吗?

谢谢。

【问题讨论】:

  • 真的要生成这两个文件吗?难道你不能只保存两个变量中的内容并比较它们,而不是写入磁盘,然后重新打开并比较?
  • 请描述“filecmp.cmp”行抛出的错误。

标签: python


【解决方案1】:

如果这是您的实际代码(或其中的一部分),当您在 if 行中遇到的错误可能是 SyntaxError 时,由于行尾缺少冒号 (:) .

另外,我建议不要写入实际文件,然后使用filecmp 比较这些文件,而是将您的keyfile 读入一个字符串变量,将您的file1 写入另一个字符串变量,然后比较那些变量。找到 i 的正确值后,您可以编写实际文件 file1file2,而不是最多写入(和覆盖)它们一百次。

伪代码:

with open("keyfile") as k:
    keyfile = k.read()
    for i in range(100, 0, -1):
        file1 = # generate data based on the value of i
        if keyfile == file1:
            file2 = # generate data based on the value of i
            with open("file1", "w") as p, open("file2", "w") as q:
                # write file1 and file2 to actual files
            print "%d is the correct value of it" % i
            break

【讨论】:

    【解决方案2】:

    对于第二个问题:with 语句将关闭if (filecmp ... 行之前的2 个文件,然后filecmp 将重新打开“file1”;在下一次循环运行中,“file1”和“file2”将被覆盖。

    顺便说一句。您可能需要在open() 中使用"wb" 而不是"w"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 2017-12-19
      • 2019-04-25
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 2015-10-25
      相关资源
      最近更新 更多