Python 2.7.2 一个变量多个值

3 投票
4 回答
1210 浏览
提问于 2025-04-17 12:35

我在家里经营自己的生意,最近刚开始学习Python,已经有两天了。我想写一个脚本,逐行检查我的日志文件,看看系统的名称是否符合我规定的命名规则。我有好几种不同的命名规则,想让这个脚本能检查所有这些规则。我试过用列表(如下所示),但这样不行;然后我又试着用普通的括号,结果出现了错误(需要左操作数,而不是元组)。我已经标记出了那些出问题的行。

    #variables
    tag = ["DATA-", "MARK", "MOM", "WORK-"] #THIS ONE!!!!!!

    #User Input
    print "Please select Day of the week"
    print "1. Monday"
    print "2. Tuesday"
    print "3. Wednesday"
    print "4. Thursday"
    print "5. Friday"
    print "6. Saturday"
    print "7. Sunday"
    day = input("> ")

    #open appropriate file and check to see if 'tag' is present in each line
    #then, if it doesn't, print the line out.
    if day == 1:
        f = open('F:\DhcpSrvLog-Mon.log', 'r')
        for line in f:
                if tag in line:  #THIS ONE!!!!!!!!!!!!!
                        pass
                else:
                        print line 

如果有任何建议或技巧,我会非常感激!

4 个回答

1

可以使用 any 这个函数来检查这个问题。这样做更有效率,因为如果它发现某个标签符合条件,就不会继续检查其他标签了。

any(x in line for x in tag)
1
if day == 1:
    f = open('F:\DhcpSrvLog-Mon.log', 'r')
    for line in f:
            if tag in line:  #THIS ONE!!!!!!!!!!!!!
                    pass
            else:
                    print line 

用下面的内容替换

if day == 1:
    f = open('F:\DhcpSrvLog-Mon.log', 'r')
    for line in f:
            if [x for x in tag if x in line]:  #THIS ONE!!!!!!!!!!!!!
                    pass
            else:
                    print line 
2

我建议把代码改成这样:

with open('F:\DhcpSrvLog-Mon.log', 'rU') as f:
    for line in f:
        for t in tag:
            if t in line: break
        else:
            print line

使用 with 这个写法可以让你在代码块结束时自动关闭文件,所以你不用担心忘记关闭文件的问题。而在 for 循环中使用 else: 只有在你没有提前跳出循环的情况下才会触发。

撰写回答