【问题标题】:How can i extract specific range of lines in a .txt file?如何在 .txt 文件中提取特定范围的行?
【发布时间】:2019-06-24 21:01:09
【问题描述】:

在一个文本文件中,我有一个关键文本“Remuneração total”。在文件中找到此文本行的第二个匹配项后,我应该在此关键行之前和之后读取并打印 20 行。

我试图在互联网上找到类似的东西,但我什么也没找到。我是 python 编程的新手,所以这对我来说是一项相当艰巨的工作。

我只找到了我想要的第一行。

read_file = open(r"C:\Users\guerr\OneDrive\Documentos\PYTHON\TXT_FILES\file.txt", encoding='utf-8') # open file

lines = read_file.readlines()  # read all lines
for index, line in enumerate(lines):  # enumerate the list 

    if key in line: 
        print(line)  

一个 乙 C D 乙 F G

如果我的键是“D”并且前后行的范围是2,它应该返回给我:

B C D 乙 F

【问题讨论】:

    标签: python jupyter-notebook text-extraction


    【解决方案1】:
    lines = '''
    A
    B
    C
    D
    E
    F
    G'''
    
    def custom_print(data, key, n):
        g = [data[i-2:i] + [val] + data[i+1:i+3] for i, val in enumerate(data) if key in val]
        return g[0] if g else []
    
    data = lines.split()
    print(custom_print(data, 'D', 2))
    

    打印:

    ['B', 'C', 'D', 'E', 'F']
    

    如果未找到 key,则 custom_print() 返回空列表。

    【讨论】:

      【解决方案2】:

      假设每个字母位于不同的行,您应该遍历列表并在找到键后停止,并记录您所在的行号。然后,如果它与键之间的距离小于或等于范围,则再次打开它并打印该行。

      例如:

      key = "D"
      lines = read_file.readlines()  # read all lines
      for index, line in enumerate(lines):  # enumerate the list 
      
          if key in line: 
              key_line = index
      
      for index, line in enumerate(lines):
          if abs(index - key_line) <= 2:
              print(line)
      

      【讨论】:

        猜你喜欢
        • 2021-11-23
        • 1970-01-01
        • 2020-04-05
        • 1970-01-01
        • 2021-09-02
        • 2010-09-10
        • 1970-01-01
        • 2022-11-20
        • 1970-01-01
        相关资源
        最近更新 更多