2013-09-09 2 views
0

Я хочу установить текущую позицию в текстовом файле на одну строку назад.установить текущую позицию в текстовом файле на одну строку назад

Пример:

Я ищу в текстовом файле для слова «х».

Textfile:

  1. Line: QWE QWE
  2. Line: х
  3. Line: Qwer
  4. Line: qwefgdg

Если я найти это слово, текущая позиция fobj следует установить на одну строку. (в примере я нахожу слово в 2. Линии, поэтому положение должно быть установлено в начало 1. Линии)

Я пытаюсь использовать fseek. Но я не был таким успешным.

+0

Это может помочь, [сделать итератор python назад] (http://stackoverflow.com/questions/2777188/making-a-python-iterator-go-backwards) – Greg

+0

Мне здесь понравилось. http://stackoverflow.com/questions/3505479/python-undo-a-python-file-readline-operation-so-file-pointer-is-back-in-origi – Peter

ответ

0
f = open('filename').readlines() 
i = 0 
while True: 
    if i > range(len(f)-1): 
     break 
    if 'x' in f[i]: 
     i = i - 1 
    print f[i] 
    i += 1 

Будьте осторожны, так как это создаст непрерывный цикл. Убедитесь, что вы вводите условие завершения цикла для завершения.

2

Это не то, как вы это делаете в Python. Вы должны просто перебирать файл, проверять текущую строку и не беспокоиться о указателях файлов. Если вам нужно получить содержимое предыдущей строки, просто сохраните ее.

>>> with open('text.txt') as f: print(f.read()) 
a 
b 
c 
d 
e 
f 

>>> needle = 'c\n' 

>>> with open('test.txt') as myfile: 
    previous = None 
    position = 0 
    for line in myfile: 
     if line == needle: 
      print("Previous line is {}".format(repr(previous))) 
      break 
     position += len(line) if line else 0 
     previous = line 

Previous line is 'b\n' 

>>> position 
4 

Если вам действительно нужна позиция байта предыдущей строки, необходимо учитывать, что tell/seek методов не очень хорошо сочетаются с итерацией, поэтому открыть файл, чтобы быть безопасными.