Python 2.7.2一个变量的多个值

Python 2.7.2一个变量的多个值,python,Python,我在家经营自己的业务,两天前开始使用Python。我正在尝试编写一个脚本,它将逐行搜索我的日志文件,并告诉我系统是否与我的强制命名方案不匹配。有多个不同的方案,我希望脚本能够找到它们。我尝试过使用列表(如下所示),但这不起作用,然后我尝试使用普通括号,这给了我一个错误(需要左操作数,而不是元组)。我注意到了那些给我带来问题的台词 #variables tag = ["DATA-", "MARK", "MOM", "WORK-"] #THIS ONE!!!!!! #Use

我在家经营自己的业务,两天前开始使用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 
任何提示或技巧都将不胜感激

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 

我建议像这样重写代码:

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
使用
可以在块退出时自动关闭文件,因此不必担心忘记关闭它。使用
else:
在for循环中仅在您没有提前中断循环时触发。

用于检查此项。它效率更高,因为如果发现一个标签在同一条线上,它不会尝试所有的标签

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

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


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

事实上,这是一个更好的解决方案,b/c:“x in line for x in tag”是生成器,与我的解决方案相比,任何(…)都将在找到第一个真值后立即停止:“如果[x代表x,如果x代表行中的x]:…”您不需要包含标记标志。使用“for…”。。。;else:…”构造。只有在for循环中没有使用中断时,才会执行“else”。因此,将print语句放入“else”块中。“else”在while和for两个循环中都可用。
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)