Python 2.7.2一个变量的多个值

时间:2012-02-08 14:25:02

标签: python

我在家经营自己的公司,并在2天前开始使用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 个答案:

答案 0 :(得分: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:仅在您之前没有中断循环时触发。

答案 1 :(得分: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 :(得分:1)

使用any来检查这一点。它效率更高,因为如果找到一个标记,它就不会尝试所有标记。

any(x in line for x in tag)

答案 3 :(得分:0)

contains_tag=False
for t in tag:
    if t in line:
        contains_tag=True
        break # Found a match, break out of for loop

if not contains_tag:
    print (line)

首先,您需要遍历每个标记(例如for t in tag)。然后,您需要检查t中是否包含字符串line

由于您只查找一个匹配的标记,最简单的方法是使用布尔变量跟踪。

如果您只想查找标记开头的日志消息,您可以说if line.startswith(t)而不是if t in line