我正在尝试使用“ 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/