2014-11-11 3 views
0

Я хочу вытащить все данные из текстового файла из указанного номера строки до конца файла. Это, как я пытался:Выдержка из текущего положения до конца файла

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 

Существует на самом деле пустая строка между заголовком и данными, которые я хочу, так что в идеале я мог пропустить это также.

+0

Привет, каков ваш вопрос? – twasbrillig

+0

Вам нужно сделать это в python? –

+0

@ AtlasMeh-ed yes – Bob

ответ

0

Знаете ли вы номер строки заранее? Если да, то

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 

Это не будет идеальным, если ваши файлы огромны (поскольку строки файла загружаются в память); в этом случае вы можете сделать это за два прохода, только сохраняя данные файла на втором проходе.

+0

У меня нет достаточного количества репутации, но отметьте это как принятое (это не позволит мне прямо сейчас). Благодарю. – Bob

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-й строкой.

+1

Что делать, если он в Windows? – senshin

+0

@senshin Я изменил свой ответ. –

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 } 

это даст вам линию номер в качестве ключа и линии в качестве значения, с указанным номером.

0

Ваш если пункт находится в неправильном положении:

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) 
Смежные вопросы