有没有办法从python中的文件读取10000行?

win*_*und 13 python

我在python中相对较新,正在研究C语言.由于我在python中看到了许多新功能,我不知道,我想知道是否有一个函数可以从python中的文件请求10000行.

如果存在这样的函数,这样的东西就是我所期望的:

lines = get_10000_lines(file_pointer)
Run Code Online (Sandbox Code Playgroud)

python是否有内置功能,或者我可以为此下载任何模块吗?如果没有,我该如何做到这一点是最简单的方法.我需要分析一个巨大的文件,所以我想读取10000行并分析每次以节省内存.

谢谢你的帮助!

Chi*_*ust 24

f.readlines()返回一个包含文件中所有数据行的列表.如果给定一个可选的参数sizehint,它会从文件读取多个字节,并且足以完成一行,并从中返回行.这通常用于允许按行有效读取大文件,但无需将整个文件加载到内存中.只返回完整的行.

来自文档.

这不是你要求的,因为这限制了读取的字节而不是读取的行,但我认为这是你想要做的.

  • 很抱歉今天没有任何选票,但我认为这是一个有用的提示. (2认同)
  • 他说:"我需要分析一个巨大的文件,所以我想读取10000行并每次分析以节省内存." 无论如何,使用readlines的这个特性是缓冲读取的正确和最简单的方法. (2认同)
  • +1.事实上,它比精确读取10000行更有效,但事实上它更简单,这是真正的好处. (2认同)

Fre*_*Foo 21

from itertools import islice

with open(filename) as f:
    first10000 = islice(f, 10000)
Run Code Online (Sandbox Code Playgroud)

这设置first10000为一个可迭代的对象,即你可以用它循环

for x in first10000:
    do_something_with(x)
Run Code Online (Sandbox Code Playgroud)

如果您需要列表,请list(islice(f, 10000))改为执行.

当文件包含少于10k行时,这将返回文件中的所有行,没有填充(与range基于-based的解决方案不同).当以块的形式读取文件时,结果中<10000行会发出EOF信号:

with open(filename) as f:
    while True:
        next10k = list(islice(f, 10000))  # need list to do len, 3 lines down
        for ln in next10k:
            process(ln)
        if len(next10k) < 10000:
            break
Run Code Online (Sandbox Code Playgroud)

  • 这可能是完全符合OP要求的最佳方式.但它几乎可以保证效率低于ChipJust的答案.读取512K中的许多行需要单次读取,并且承载平均行长度的一半的缓冲器; 阅读10000行几乎意味着要么进行太多读取,要么携带更大的缓冲区.话虽这么说,我无法想象什么时候会有所作为(如果确实如此,你可能想要mmap - 或者更好的是,更改数据格式以便问题消失). (2认同)

Jon*_*art 5

你真的关心你一次有多少行?通常最有意义的是逐行迭代文件对象:

f = open('myfile.txt', 'r')
for line in f:
    print line
Run Code Online (Sandbox Code Playgroud)

python文档表明这是处理文件的首选方式:

读取行的另一种方法是遍历文件对象.这是内存高效,快速,并导致更简单的代码.

有关示例,请参阅python文档.