即使文件相同,filecmp 也会返回 False

我试图在两个文件之间进行比较filecmp,问题是结果始终是"No, the files are NOT the same",这意味着False 即使文件是相同的。


我正在向两个不同的文件写入相同的内容。首先我写入文件revision_1.txt:


original_stdout = sys.stdout

with open('revision_1.txt', 'w') as rev1:

       sys.stdout = rev1

       print(revision)  # revision is output from command i took before

sys.stdout = original_stdout


if filecmp.cmp('revision_1.txt', 'revision_2.txt'):

    # revision_2.txt is file I c

    print("Both the files are same")

else:

    # Do whatever you want if the files are NOT the same

    print("No, the files are NOT the same")


original_stdout = sys.stdout

with open('revision_2.txt', 'w') as rev2:

       sys.stdout = rev2

       print(revision)  # revision is output from command i took before

sys.stdout = original_stdout

我的目标是如果文件相等 - 停止脚本。如果不是,它将重写revision_2.txt然后发送邮件,(我已经编写了邮件代码)。


慕桂英546537
浏览 134回答 3
3回答

小怪兽爱吃肉

尝试将shallow设置为false(默认为True),即if filecmp.cmp('revision_1.txt', 'revision_2.txt', shallow=False):从文档中:如果为 true,则具有相同 os.stat() 签名的文件被视为相等。否则,将比较文件的内容。https://docs.python.org/3/library/filecmp.html#filecmp.cmp

皈依舞

如何忽略 message-id (我只需要修订值)?查看脚本输出:不等于修订版:fpc1-1603878922-228FFFFFFF 修订版:fpc1-1603878922-228FFFFFFFF脚本:import smtplibimport email.messagefrom email.mime.text import MIMETextfrom ncclient import managerfrom ncclient.xml_ import *import sysimport timeimport filecmp# Connecting to juniper cc-vc-legconn = manager.connect(        host='10.1.1.1',        port='830',        username='test',        password='test',        timeout=10,        device_params={'name':'junos'},        hostkey_verify=False)# Take juniper commandsresault = conn.command('show version | match Hostname', format='text')revision = conn.command('show system commit revision', format='text')compare_config = conn.compare_configuration(rollback=1)# Open & read file vc-lg_rev.textf = open('vc-lg_rev.text', 'r')d = f.read()# Check if revision output is equal to file "vc-lg_rev.text"# If equal exit the scriptif  (revision == d):       print('equal')       exit()       print('I hop script stopped')else:       print('Not equal')       print(revision)       print('FFFFFFF')       print(d)       print('FFFFFFF')# To save last revision number to "vc-lg_rev.text"with open('vc-lg_rev.text', 'w', buffering=1) as rev1:        rev1.write(str(revision))        rev1.flush()rev1.close()# This is how i copy "compare_config" output to file "vc-lg_compare.text"original_stdout = sys.stdoutwith open('vc-lg_compare.text', 'w') as a:        sys.stdout = a        print(compare_config)sys.stdout = original_stdoutdef send_email(compare):    server = smtplib.SMTP('techunix.technion.ac.il', 25)    email_reciver = 'rafish@technion.ac.il', 'rafi1shemesh@gmail.com'    message = f"'Subject': mail_subject \n\n {compare}"    ID = 'Juniper_Compare'    server.sendmail(ID, email_reciver, message)with open('vc-lg_compare.text', 'r') as compare:   # "as" means file object called compare        text = str(compare.read())                 # I want to recive the output as string to look specific word in the file        if (text.find('+') > -1) or (text.find('- ') > -1):                send_email(text)

慕雪6442864

您对文件的使用不寻常:import filecmprevision = "08/15"with open('revision_1.txt', 'w') as rev1:      rev1.write(revision)with open('revision_2.txt', 'w') as rev2:      rev2.write(revision)with open('revision_3.txt', 'w') as rev3:      rev3.write(revision + "-42")# should compare equalif filecmp.cmp('revision_1.txt', 'revision_2.txt'):    print("Identical")else:    print("No, the files are NOT the same")# should NOT compare equalif filecmp.cmp('revision_1.txt', 'revision_3.txt'):    print("Identical")else:    print("No, the files are NOT the same")印刷IdenticalNo, the files are NOT the same
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python