我有一个程序告诉我今天谁将过生日。
我将姓名和生日存储在名为data.txt
的文本文件中
以下是data.txt的示例:
Master 13/12
Monkey 16/06
Michael 16/06
mike 01/05
Minita 24/06
Mom 12/06
以下是该计划:
from __future__ import print_function
import time
logic = time.strftime("%d/%m")
err_occur = []
pattern = re.compile(logic, re.IGNORECASE)
try:
with open ('data.txt', 'rt') as in_file:
for linenum, line in enumerate(in_file):
if pattern.search(line) != None:
err_occur.append((linenum, line.rstrip('\n')))
for linenum, line in err_occur:
print("Line ", linenum, ": ", line, sep='')
except IOError:
print ("data.txt Not found")
如果我运行此程序,如果今天的日期是16/06,则其输出应为
Line 3: Monkey 16/06
Line 4: Michael 16/06
然而,它显示的输出仅为
Line 3: Monkey 16/06
我想for...in
声明无效?
他们不应该在一个循环中工作吗?
自从我学习python以来只有几天了。我还没有完全理解迭代器。因此,如果你能用外行术语来解释我的错误,那将是非常有用的。
编辑 - 感谢@zwer指出我的错误,并感谢@Coldspeed提供更有效的解决方案。
答案 0 :(得分:1)
有一种更简单的方法可以逐个获得这些匹配的行。您可以使用re.finditer
。它返回一个匹配的生成器:
from __future__ import print_function
import re
import time
s = open('data.txt', 'rt').read()
logic = time.strftime("%d/%m")
err_occur = []
for m in re.finditer('(.*?)[\s]*' + logic, s, re.M | re.IGNORECASE):
print(m.group(0))
输出
Monkey 16/06
Michael 16/06
这不会在输出中给你Line x
。如果你想要,你可能需要稍微改变一下。
答案 1 :(得分:1)
为什么在读取文件时会进行双循环?如果您想按照自己的方式构建它,只需打印出匹配的行:
gmdate