如何获得19GB文件的第二行-python?

如何获得19GB文件的第二行-python?,python,file,search,size,bigdata,Python,File,Search,Size,Bigdata,一个文件中有超过1000万行,总文件大小为19GB,我只需要得到第二行 获取特定行可以通过循环完成: for i,j in enumerate(open('foobar.txt')): if i == 1: print j break 或者使用linecache(但不适用于大文件,因为它会将所有内容加载到RAM) 或者使用unix命令和os.popen: import os infile = 'foobar.txt' print os.popen('head -2 '+in

一个文件中有超过1000万行,总文件大小为19GB,我只需要得到第二行

获取特定行可以通过循环完成:

for i,j in enumerate(open('foobar.txt')):
  if i == 1:
    print j
    break
或者使用
linecache
(但不适用于大文件,因为它会将所有内容加载到RAM)

或者使用
unix
命令和
os.popen

import os
infile = 'foobar.txt'
print os.popen('head -2 '+infile+'|tail -1')
我正在探索更多的选择,以便只获得第二条线路

  • 有没有办法读取到第二个
    \n
    然后停止读取?
    (这样可以节省RAM空间)
  • 有没有办法读取到1GB的文件,然后查找第二行?
  • 在第二行之前还有什么其他阅读方法?
我假设这个问题是可伸缩的,因为第x行中的x表示某人很小,文件大小为>>>。

您也可以这样做:

import itertools
n = 1
with open('foobar.txt') as f:
    print next(itertools.islice(f, n, n+1))

它是否将所有19GB加载到RAM中?@alvas否,当您迭代一个文件对象时,该文件将被分块读取;换句话说,读取是缓冲的。感谢澄清=),这与我在第一个代码段中使用的正常迭代有什么不同吗?@alvas
islice
应该更快,因为它在C代码中计数,从而避免了Python中的
if
import itertools
n = 1
with open('foobar.txt') as f:
    print next(itertools.islice(f, n, n+1))