从当前位置提取到文件结尾

时间:2014-11-11 20:54:55

标签: python python-2.7

我想从指定行号的文本文件中提取所有数据,直到文件结束。这就是我尝试过的方式:

def extract_values(f):
    line_offset = []
    offset = 0
    last_line_of_heading = False

    if not last_line_of_heading:
        for line in f:
            line_offset.append(offset)
            offset += len(line)
            if whatever_condition:
                last_line_of_heading = True

    f.seek(0)

    # non-functioning pseudocode follows
    data = f[offset:]  # read from current offset to end of file into this variable

标题和我想要的数据之间实际上有一个空行,所以理想情况下我也可以跳过它。

4 个答案:

答案 0 :(得分:1)

您是否提前知道了行号?如果是的话,

def extract_values(f):
    line_number = # something
    data = f.readlines()[line_number:]

如果没有,您需要根据文件本身的内容确定行号,

def extract_values(f):
    lines = f.readlines()
    for line_number, line in enumerate(lines):
        if some_condition(line):
            data = lines[line_number:]
            break

如果您的文件很大(因为文件的行被加载到内存中),这将不是理想的;在这种情况下,您可能希望在两次传递中执行此操作,仅在第二次传递时存储文件数据。

答案 1 :(得分:0)

试试这个小型python程序LastLines.py

import sys

def main():
    firstLine = int(sys.argv[1])
    lines = sys.stdin.read().splitlines()[firstLine:]
    for curLine in lines:
        print curLine

if __name__ == "__main__":
    main()

示例输入,test1.txt:

a
b
c
d

使用示例:

python LastLines.py 2 < test1.txt

示例输出:

c
d

该程序假定文件中的第一行是第0行。

答案 2 :(得分:0)

您可以使用enumerate:

f=open('your_file')
for i,x in enumerate(f):
    if i >= your_line:
        #do your stuff

此处我将存储从0开始的行号,而x将包含该行

使用列表理解

[ x for i,x in enumerate(f) if i >= your_line ]

将为您提供指定行

之后的行列表

使用字典理解

{ i:x for i,x in enumerate(f) if i >= your_line }

这将从指定的行号给出行号作为键和行作为值。

答案 3 :(得分:0)

您的if子句位置错误:

for line in f:
    if not last_line_of_heading:

考虑以下代码:

def extract_values(f):
    rows = []
    last_line_of_heading = False

    for line in f:
        if last_line_of_heading:
            rows.append(line)
        elif whatever_condition:
            last_line_of_heading = True
    # if you want a string instead of an array of lines:
    data = "\n".join(rows)