【问题标题】:Python: How to search for a string and print while next different string shows up repeadtedlyPython:如何在下一个不同的字符串重复出现时搜索字符串并打印
【发布时间】:2021-07-14 08:58:44
【问题描述】:

在这里需要一点帮助。 我有一个文件,如下所示:

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

我正在尝试提取名称中包含“狗”的所有类别的详细信息及其各自的成员,最好是在字典中,以便我可以对其进行迭代以进行进一步检查。

尝试了很多方法,例如在“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 的确切位置,然后可能是“继续”语句。

如果有人可以用类似或不同的方法指导或重定向,那就太好了。

提前致谢。

【问题讨论】:

    标签: python dictionary search match


    【解决方案1】:

    您快到了,但您需要在每个循环中将 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
    

    【讨论】:

      【解决方案2】:

      试试下面的代码:

      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())
      

      【讨论】:

        【解决方案3】:

        我建议您先阅读所有内容并将其存储到字典中,然后再使用它。 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)
        

        【讨论】:

          猜你喜欢
          • 2012-10-04
          • 2018-07-27
          • 1970-01-01
          • 2021-07-11
          • 1970-01-01
          • 2023-02-08
          • 2020-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多