多行文件在Python阅读(Multiline file read in Python)

2019-09-23 17:43发布

我寻找在Python的方法,其可以从文件中读取多行(10条线在一时间)。 我已经看着readlines(sizehint)我试图通过值10,但不只读10行。 它实际上直到读取文件(我曾尝试对小文件)结束。 每一行是11个字节长,每次读取应取我每次10行。 如果发现不到10行那么只返回那些行。 我的实际文件包含超过15万线。

任何想法,我怎么能做到这一点?

Answer 1:

您正在寻找itertools.islice()

with open('data.txt') as f:
    lines = []
    while True:
        line = list(islice(f, 10)) #islice returns an iterator ,so you convert it to list here.
        if line:                     
            #do something with current set of <=10 lines here
            lines.append(line)       # may be store it 
        else:
            break
    print lines    


Answer 2:

这应该这样做

def read10Lines(fp):
    answer = []
    for i in range(10):
        answer.append(fp.readline())
    return answer

或者,列表理解:

ten_lines = [fp.readline() for _ in range(10)]

在这两种情况下, fp = open('path/to/file')



Answer 3:

它可以支持一个更熟悉的摆脱无聊的无限循环的另一个解决方案for循环依赖于itertools.izip_longest和一个小窍门与迭代器。 诀窍是, zip(*[iter(iterator)]*n)场所iterator成大小为n的块。 由于文件已经生成般的迭代器(而不是作为样序列),我们可以这样写:

from itertools import izip_longest
with open('data.txt') as f:
    for ten_lines in izip_longest(*[f]*10,fillvalue=None):
        if ten_lines[-1] is None:
           ten_lines = filter(ten_lines) #filter removes the `None` values at the end
        process(ten_lines) 


Answer 4:

from itertools import groupby, count
with open("data.txt") as f:
    groups = groupby(f, key=lambda x,c=count():next(c)//10)
    for k, v in groups:
        bunch_of_lines = list(v)
        print bunch_of_lines


文章来源: Multiline file read in Python