gpt4 book ai didi

python - 使用iterator和re python提取特定信息

转载 作者:行者123 更新时间:2023-12-01 02:52:33 26 4
gpt4 key购买 nike

我有一个程序可以告诉我今天谁过生日。
我将姓名和生日存储在名为 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 提供了更有效的解决方案。

最佳答案

有一种更简单的方法可以逐条获取这些匹配行。您可以使用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。如果您想要这样,您可能需要稍微改变一下。

关于python - 使用iterator和re python提取特定信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44588975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com