Python:如何搜索一个字符串并在下一个不同的字符串重复出现时打印
Python: How to search for a string and print while next different string shows up repeadtedly
这里需要一点帮助。
我有一个如下所示的文件:
category: dog1
member10
member20
category: cat
member1
member2
member3
category: mydog
member100
member200
member300
category: lion
member1000
member2000
member3000
member4000
category: wolf
member4
member5
member6
category: dog4
member400
member500
member600
member700
member800
我正在尝试提取名称中包含“dog”的所有类别及其各自成员的详细信息,最好是在字典中,以便我可以对其进行迭代以进行进一步检查。
尝试了很多方法,例如在 'if' 循环中设置打印标志,但仍然无法获得正确的代码。
===========================================
import re
from re import search
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if (should_print or keyword in line):
print (line.strip("\n"))
should_print = True
===========================================
上面从我想要的“狗”类别开始,然后继续打印直到文件末尾。不确定我们到底需要在哪里设置 'should_print' 标志 False 然后可能是 'continue' 语句。
如果有人可以使用类似或不同的方法进行指导或重定向,那就太好了。
提前致谢。
你就快完成了,但是如果该行是类别标记,你需要将 should_print
设置为 false 每个循环。
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if line.startswith('category'):
should_print = False
if (should_print or keyword in line):
print (line.strip("\n"))
should_print = True
输出:
category: dog1
member10
member20
category: mydog
member100
member200
member300
category: dog4
member400
member500
member600
member700
member800
试试下面的代码:
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if "category" in line:
if keyword in line:
should_print = True
else:
should_print = False
if should_print:
print(line.strip())
我建议您先将所有内容和存储内容读取到一个字典中,然后再使用它。 defaultdict
可以帮忙做(非强制)
from collections import defaultdict
key_name = ""
result = defaultdict(list)
with open("test.txt") as file:
for line in file:
if 'category:' in line:
key_name = line.split(":")[1].strip()
else:
result[key_name].append(line.rstrip())
# result is like
{'dog1': ['member10', 'member20'], 'cat': ['member1', 'member2', 'member3'], 'mydog': ['member100', 'member200', 'member300'], ...}
使用
keyword = "dog"
for k, values in result.items():
if keyword in k:
print(k, values)
这里需要一点帮助。 我有一个如下所示的文件:
category: dog1
member10
member20
category: cat
member1
member2
member3
category: mydog
member100
member200
member300
category: lion
member1000
member2000
member3000
member4000
category: wolf
member4
member5
member6
category: dog4
member400
member500
member600
member700
member800
我正在尝试提取名称中包含“dog”的所有类别及其各自成员的详细信息,最好是在字典中,以便我可以对其进行迭代以进行进一步检查。
尝试了很多方法,例如在 'if' 循环中设置打印标志,但仍然无法获得正确的代码。
===========================================
import re
from re import search
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if (should_print or keyword in line):
print (line.strip("\n"))
should_print = True
===========================================
上面从我想要的“狗”类别开始,然后继续打印直到文件末尾。不确定我们到底需要在哪里设置 'should_print' 标志 False 然后可能是 'continue' 语句。
如果有人可以使用类似或不同的方法进行指导或重定向,那就太好了。
提前致谢。
你就快完成了,但是如果该行是类别标记,你需要将 should_print
设置为 false 每个循环。
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if line.startswith('category'):
should_print = False
if (should_print or keyword in line):
print (line.strip("\n"))
should_print = True
输出:
category: dog1
member10
member20
category: mydog
member100
member200
member300
category: dog4
member400
member500
member600
member700
member800
试试下面的代码:
keyword = "dog"
should_print = False
file = open("inputfile.txt","r")
lines = file.readlines()
for line in lines:
if "category" in line:
if keyword in line:
should_print = True
else:
should_print = False
if should_print:
print(line.strip())
我建议您先将所有内容和存储内容读取到一个字典中,然后再使用它。 defaultdict
可以帮忙做(非强制)
from collections import defaultdict
key_name = ""
result = defaultdict(list)
with open("test.txt") as file:
for line in file:
if 'category:' in line:
key_name = line.split(":")[1].strip()
else:
result[key_name].append(line.rstrip())
# result is like
{'dog1': ['member10', 'member20'], 'cat': ['member1', 'member2', 'member3'], 'mydog': ['member100', 'member200', 'member300'], ...}
使用
keyword = "dog"
for k, values in result.items():
if keyword in k:
print(k, values)