Python在比较文件时未返回预期值
我正在尝试构建此脚本,以检查远程服务器上的文件是否包含一组后缀,即.ok、.err、.log。我不明白为什么我会得到我现在的回报Python在比较文件时未返回预期值,python,Python,我正在尝试构建此脚本,以检查远程服务器上的文件是否包含一组后缀,即.ok、.err、.log。我不明白为什么我会得到我现在的回报 “('\\\\THPNWSS5\\d$\\DA$Utils\\log\\networker',[],['P3EWS.err'])没有什么是平等的” 我知道我的try语句有问题,但我看不出来 chkbkpstats = csv.reader(file('c://temp//networkerservers1.csv')) srvrs = []
“('\\\\THPNWSS5\\d$\\DA$Utils\\log\\networker',[],['P3EWS.err'])没有什么是平等的
”我知道我的try语句有问题,但我看不出来
chkbkpstats = csv.reader(file('c://temp//networkerservers1.csv'))
srvrs = []
for row in chkbkpstats:
srvrs.append({'Name' : row[0], 'Instance' : row[1]})
for srvr in srvrs:
srvrName = (srvr['Name'])
srvrInst = (srvr['Instance'])
w2k3chk = r'\\%s\d$\DA$Utils\log\networker' % srvrName
w2k8chk = r'\\%s\c$\ProgramData\folder\DA$Utils\log\networker' % srvrName
try:
c = wmi.WMI(srvr['Name'])
except:
print 'Error connecting to %s to check OS version' % srvrName
else:
osVer = c.Win32_OperatingSystem()[0].Caption
if '2003' in osVer:
for file in os.walk(w2k3chk):
print file
try:
if srvrInst == srvrInst + ".log":
print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
if srvrInst == (srvrInst + ".ok"):
print 'Completed Successfully'
if srvrInst == (srvrInst + ".err"):
print 'Backup failed'
except:
print 'nothing is equal'
#print '%s is w2k3' % srvr['Name']
elif '2008' in osVer:
print '%s is w2k8' % srvr['Name']
这条线路有问题
if srvrInst == file.srvrInst + ".log":
应该是:-
if file == (srvrInst + ".log"):
文件没有srvrInst
编辑后更新:-
你怎么能认为这是对的:-
if srvrInst == (srvrInst + ".ok"):
假设srvrInst=“John”
“John”==“John.ok”
有可能是真的吗???@लंड 已经指出了当前代码中最紧迫的错误,他建议的修复方法,
file==(srcInst+“.log”)
也不起作用。这是因为os.walk
函数不仅仅返回文件名。它返回一个由三个元组组成的生成器,每个元组由一个目录、一个子目录列表(也将遍历)和一个文件列表组成。您需要一个额外的循环来遍历各个文件
像这样的方法应该会奏效:
found = False
for folder, subfolders, files in os.walk(w2k3chk):
for file in files:
if file == srvrInst + ".log":
found = True
print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
elif file == (srvrInst + ".ok"):
found = True
print 'Completed Successfully'
elif file == (srvrInst + ".err"):
found = True
print 'Backup failed'
if not found:
print 'No file found'
如果您确定要搜索的文件夹中应该只有一个文件,您可以将其简化一点:
try:
folder, subfolders, files = next(os.walk(w2k3chk)):
file = files[0]
if file == srvrInst + ".log":
print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
elif file == (srvrInst + ".ok"):
print 'Completed Successfully'
elif file == (srvrInst + ".err"):
print 'Backup failed'
else:
print 'Unknown file found: %s' % (file)
except (StopIteration, IndexError): # exceptions if folder or file doesn't exist
print 'No file found'
您的“nothing is equal”Exception block将永远不会触发…这是唯一触发的行。您应该避免使用裸露的
Exception:
子句——具体说明要捕获的异常,如AttributeError
或IOError
或其他任何异常。否则,您可能会在变量名中键入一个错误,或者在某个地方有一个额外的逗号,而namererror
或TypeError
将被吞没,这使得调试非常困难。是的,我从页面上的代码中删除了它。当我从记事本上复制和粘贴时,我忘了编辑。哇,我很尴尬。不,不行。我开始阅读glob和fnmatch,但这是可行的。第一个选项最适合我,因为目录中可能有不止一个文件。当我尝试你的代码时,当我打印它给我的文件['P3EWS.err']时,它仍然没有找到任何文件。我将其与P3EWS.xxxWhoops进行比较,我没有修复其中一个if
子句。只需将最后一个elif
左侧的srvrInst
替换为文件
。我已经更新了答案。这就是我想要的。第一盘是我想要完成的。谢谢你纠正我。