首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python在比较文件时未返回预期值

Python在比较文件时未返回预期值
EN

Stack Overflow用户
提问于 2012-09-08 02:26:10
回答 2查看 113关注 0票数 0

我正在尝试构建此脚本以检查远程服务器上的文件是否包含设置的后缀,IE .ok,.err,.log。我不明白为什么我得到的回报是我是"('\\\\THPNWSS5\\d$\\DA$Utils\\log\\networker', [], ['P3EWS.err']) nothing is equal

我知道我的try语句有问题,但我看不到它。

代码语言:javascript
复制
    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']
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-08 03:33:31

虽然@लंड已经指出了当前代码中最严重的错误,但他建议修复,file == (srcInst + ".log")也不会工作。这是因为os.walk函数不仅仅返回文件名。它返回一个三元组生成器,每个三元组由一个目录、一个子目录列表(也将被遍历)和一个文件列表组成。您需要一个额外的循环来遍历各个文件。

像这样的东西应该是有效的:

代码语言:javascript
复制
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'

如果你确定在你搜索的文件夹中应该只有一个文件,你可以简化一下:

代码语言:javascript
复制
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'
票数 0
EN

Stack Overflow用户

发布于 2012-09-08 02:37:50

这条线路有问题

代码语言:javascript
复制
 if srvrInst == file.srvrInst + ".log":

应该是:-

代码语言:javascript
复制
if file == (srvrInst + ".log"):

文件没有srvrInst

编辑后的更新:-

你怎么能认为这是真的呢?

代码语言:javascript
复制
if srvrInst == (srvrInst + ".ok"):

假设srvrInst="John"

"John"=="John.ok"

会是真的吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12323479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档