如何解决即使硬文件相等,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
然后发送邮件(我已经为邮件编写了代码)。
解决方法
您对文件的使用情况异常:
import filecmp
revision = "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 equal
if filecmp.cmp('revision_1.txt','revision_2.txt'):
print("Identical")
else:
print("No,the files are NOT the same")
# should NOT compare equal
if filecmp.cmp('revision_1.txt','revision_3.txt'):
print("Identical")
else:
print("No,the files are NOT the same")
打印
Identical
No,the files are NOT the same
,
尝试将shallow设置为false(默认为True),即
if filecmp.cmp('revision_1.txt','revision_2.txt',shallow=False):
从文档中: 如果shallow为true,则具有相同os.stat()签名的文件将被视为相等。否则,将比较文件的内容。
https://docs.python.org/3/library/filecmp.html#filecmp.cmp
,谢谢大家的答复 正如我所说的,我对Python很陌生 根据您的建议,我更改了代码,这次我将发送完整的脚本并进行解释
我成功地在“修订”和“ d”之间进行了比较,我的问题是我得到了不同的rpc-reply message-id,
如何才能忽略message-id(我只需要Revision值)?
查看脚本输出: 不相等 修订:fpc1-1603878922-228
FFFFFFF 修订:fpc1-1603878922-228
FFFFFFF
脚本:
import smtplib
import email.message
from email.mime.text import MIMEText
from ncclient import manager
from ncclient.xml_ import *
import sys
import time
import filecmp
# Connecting to juniper cc-vc-leg
conn = manager.connect(
host='10.1.1.1',port='830',username='test',password='test',timeout=10,device_params={'name':'junos'},hostkey_verify=False)
# Take juniper commands
resault = 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.text
f = 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 script
if (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.stdout
with open('vc-lg_compare.text','w') as a:
sys.stdout = a
print(compare_config)
sys.stdout = original_stdout
def 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。