我有以下脚本
#Tails every new line created in this file
for line in tailer.follow(open("my/path/chatlog.html")):
#If the new line has the word "TURN" on it, continue
if("TURN" in line):
#IF any of the names in the list characterNames is in the new line, execute the function parseCharacter passing the matched "name"
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
那个"名称"在最后一行是我需要匹配行中匹配的名称。我试图查看any()文档,但无法找到解决方案。
提前致谢。
答案 0 :(得分:0)
改变这个:
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
对此:
try:
bingo = next(name for name in characterNames if name in line.lower()):
except StopIteration: # none found
# break \ continue ?
else:
parseCharacter(charactersPath + bingo + ".xml")
any()
通过迭代器尝试查找返回True
的任何值,但不会告诉您它是哪一个。next()
只会返回返回True
的 next 值。这里的问题是可能有多个这样做。如果您想要全部,请不要使用next
。最后,请注意,如果找不到任何内容,next()
也可以采用默认参数。你可能想用它。如果这样做,则不需要except
部分。它是在内部处理的。
答案 1 :(得分:0)
在
if any(name in line.lower() for name in characterNames):
parseCharacter(charactersPath + name + ".xml")
name
仅在括号中有效。之后名称不再定义。
您必须手动浏览列表:
for name in characterNames:
if name in line.lower():
parseCharacter(charactersPath + name + ".xml")
答案 2 :(得分:0)
只需将列表理解中的any更改为列表循环:
for name in [name for name in characterNames if name in line.lower()]:
parseCharacter(charactersPath + name + ".xml")