【问题标题】:Extracting line number of a txt file in Python在Python中提取txt文件的行号
【发布时间】:2018-03-23 16:34:02
【问题描述】:

我想知道是否有一种方法可以使用 Python 在文本文件中查找行号。

例如,如果我们有文件textfile.txt

abc
deff
ghi
jkl
EOF

那么我想要一个像func(FILE,TEXT) 这样的函数,它的工作方式如下:

Input:  func(textfile.txt, "ghi")
Output: 3

【问题讨论】:

  • 为什么要行号?你最终想要做什么?
  • 我有一个包含信息的输出文件。我想找到写有“Something and something else”的行并将该行和以下“n”行复制到另一个文件中。
  • with open('my_file.txt') as f: for line_num, line in enumerate(f): 这是一个开始
  • 不是定义,是我执行函数后想要得到的输出...
  • 不能使用python关键字作为变量名。 def 保留用于函数定义。

标签: python file line-numbers


【解决方案1】:

您可以在使用enumerate() 函数获取行索引的生成器上调用next() 在一行中执行此操作。

所以,作为一个函数:

def func(f, t):
    return next(i for i, l in enumerate(open(f).read().split('\n'), 1) if l == t)

这将通过类似的方式调用:

func('textfile.txt', 'ghi') # --> 3

注意:enumerate(..., 1) 的把戏来自 @KeyurPotdar,所以是可信的

【讨论】:

  • 最后不是+1,你也可以使用enumerate(..., 1)
  • @KeyurPotdar 不错的一个:)
【解决方案2】:
file_name="test.txt"
phrase="line3"
with open(file_name) as f:
    for i, line in enumerate(f, 1):
        if phrase in line:
           print(i)

【讨论】:

    【解决方案3】:

    也许这就是你要找的东西:

    def fn(fname, substr):
        with open(fname) as text:
            for n, line in enumerate(text, start=1):
                if line.startswith(substr):
                    return n
        return -1
    

    不要害怕研究有关字符串函数、文件 I/O、上下文管理器等方面的 python 文档。您会惊讶于这样的事情是多么容易完成。

    【讨论】:

      【解决方案4】:

      这可能会有所帮助。

      def LineNumber(phrase,textObjext):
          for i, line in enumerate(textObjext, 1):
              if phrase in line:
                 return i
      
      file_name="test.txt"
      phrase="deff"
      text = open(file_name,'r')
      line = LineNumber(phrase,text)
      print(line)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多