我有一个用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
应该这样工作:
我已将filecmp.cmp语句放在if语句中,因为如果两个文件相等则返回布尔值True。当我运行代码时,这一行会引发错误。
另外,这是正确的做法吗?每次执行FOR循环时,它将生成两个文件,file1和file2。 with语句将在循环后关闭这两个文件。但是在下一轮循环中,这两个文件会被新内容覆盖吗?
感谢。
答案 0 :(得分:1)
如果这是您的实际代码(或部分代码),当if
行中出现的错误可能是SyntaxError
时由于缺少冒号(:
)在最后一行。
另外,我建议不要写入实际文件,然后使用filecmp
比较这些文件,但要将keyfile
读入字符串变量,将file1
写入另一个字符串变量,然后比较这些变量。找到i
的正确值后,您可以编写实际文件file1
和file2
,而不是写入(和覆盖)它们一百次。
伪代码:
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
答案 1 :(得分:0)
对于您的第二个问题:with
语句会在if (filecmp ...
行之前关闭2个文件,然后filecmp
将重新打开“file1”;在下一轮循环中,“file1”和“file2”将被覆盖。
顺便说一句。您可能需要在"wb"
中使用"w"
代替open()
。