0

我有一个用 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 逐一递减 'i'。
  2. file1 和 file2 是使用基于“i”值的代码生成的。
  3. 现在,我将 file1 与密钥文件进行比较。如果它们具有相同的内容,我会找到正确的密钥并打破 FOR 循环。

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

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

谢谢。

4

2 回答 2

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
于 2013-07-06T09:43:27.400 回答
0

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

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

于 2013-07-06T08:56:31.260 回答