【问题标题】:Python - grab lines from text file, lines x-yPython - 从文本文件中抓取行,行 x-y
【发布时间】:2014-09-11 11:23:23
【问题描述】:

获取文本文件前 10 行的方法可以这样:

with open("myfile.txt") as myfile:
        lines = [next(myfile).strip() for x in xrange(10)]

这将打印前 10 行

但是如果我只想要第 5-10 行呢?我该怎么做? 文件不小,会很大。我需要一种有效的方法来做到这一点。

谢谢。

【问题讨论】:

标签: python


【解决方案1】:

到目前为止,最简单的方法是使用itertools.islice

with open('myfile.text') as f:
    lines = islice(f, 5, 11)

这样做的好处是它永远不会加载整个文件;它只会做它需要做的工作。

请注意,itertools 中的函数是惰性的,因此您需要在关闭文件之前 完成对行的处理,或者将 islice 包装在 list() 中以强制执行评估。

【讨论】:

    【解决方案2】:

    如何对已有的列表进行切片。

    with open("myfile.txt") as myfile:
        lines = [next(myfile).strip() for x in xrange(10)][5:10]
    

    【讨论】:

      【解决方案3】:

      如果您知道要从哪里开始,只需更改 for 循环中的范围即可。

      var1 = 5
      var2 = 10
      for x in range(var1, var2):
      

      会从 5 循环到 10,当然您可以进一步调整变量。

      【讨论】:

        【解决方案4】:

        读取文件并将行 x 到 y 作为内容变量的列表:

        with open('content.txt') as f:
            content=f.read().split('\n')[x-1:y]
        

        注意“\n”和“\r\n”。

        【讨论】:

          【解决方案5】:

          我会这样做:

          >>> with open("myfile.txt") as myfile:
          >>>  lines = myfile.read().split('\n')[5:10]
          

          Split 会将它逐行分隔成一个行数组,[5:10] 将返回从 5 到 10 的数组元素,但是变量“lines”将是一个数组,因此只需获取一个字符串在第 5 到 10 行中,您可以:

          >>> with open("myfile.txt") as myfile:
          >>>  lines = '\n'.join(myfile.read().split('\n')[5:10])
          

          这里唯一的区别是 '\n'.join() 部分,它只获取行数组的每个元素,并将它们连接成一个由换行符分隔的字符串。

          【讨论】:

          • 这里缺少小点。文件没有操作拆分。所以我们已经阅读了内容,然后进行了分割和切割。
          猜你喜欢
          • 1970-01-01
          • 2012-11-03
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-20
          • 1970-01-01
          相关资源
          最近更新 更多