我正在尝试使用“ from itertools import islice”,以便一次使用liblas模块从* .las文件读取大量行。 (我的目标是逐块阅读)

遵循以下问题:Python how to read N number of lines at a time


  islice()可用于获取迭代器的下n个项目。从而,
  list(islice(f,n))将返回文件的后n行的列表
  F。在循环中使用它会以n个块的形式为您提供文件
  线。在文件末尾,列表可能会更短,最后
  该呼叫将返回一个空列表。


我使用以下代码:

from numpy import nonzero
from liblas import file as lasfile
from itertools import islice


chunkSize = 1000000

f = lasfile.File(inFile,None,'r') # open LAS
while True:
    chunk = list(islice(f,chunkSize))
    if not chunk:
        break
    # do other stuff


但是我有这个问题:

len(f)
2866390

chunk = list(islice(f, 1000000))
len(chunk)
**1000000**
chunk = list(islice(f, 1000000))
len(chunk)
**1000000**
chunk = list(islice(f, 1000000))
len(chunk)
**866390**
chunk = list(islice(f, 1000000))
len(chunk)
**1000000**


当文件f最终到达时,islice重新启动以读取文件。

感谢您的任何建议和帮助。非常感谢

最佳答案

编写一次生成器以一次产生n行似乎很容易:

def n_line_iterator(fobj,n):
    if n < 1:
       raise ValueError("Must supply a positive number of lines to read")

    out = []
    num = 0
    for line in fobj:
       if num == n:
          yield out  #yield 1 chunk
          num = 0
          out = []
       out.append(line)
       num += 1
    yield out  #need to yield the rest of the lines

关于python - Python:islice一次读取N行的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12783478/

10-16 23:05