Python: прочитать предыдущую строку и сравнить с текущей строкой - PullRequest
0 голосов
/ 04 января 2012

Python Noob с использованием 2,7 на Windows.Я работаю над созданием иерархического представления дерева в HTML программно.У меня есть файл, который выводится примерно так:

0
  2
    4
      6
        8
        8
0
  2
    4
    4
      6
        8
        8
      6
      6

out.txt выглядит так:

0
2
4
6
8
8
0
2
4
4
4
6
8
8
6
6

Мой код:

x = open('out.txt','r')

for current_line in x:
   prev_line = current_line[:-1]
   print "Current: " + current_line
   print "Previous: " + prev_line
   if prev_line > current_line:
       print "Folder"
   elif prev_line == current_line:
       print "Root"

x.close()

Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь сравнить prev_line с current_line, я не получаю желаемый результат.Я могу сделать что-то вроде if prev_line == "0": print "Root", но это не сработает, как только для этого случая.Кроме того, похоже, что часть if вычисляется до того, как будет сделан следующий ток.Результаты, которые я получаю из моего текущего кода, включают:

Current: 0

Previous: 0
Current: 2

Previous: 2
Current: 4

Previous: 4
Current: 6

Previous: 6
Current: 8

Previous: 8
Current: 8

Previous: 8
Current: 0

Previous: 0
Current: 2

Previous: 2
Current: 4

Previous: 4
Current: 4

Previous: 4
Current: 4

Previous: 4
Current: 6

Previous: 6
Current: 8

Previous: 8
Current: 8

Previous: 8
Current: 6

Previous: 6
Current: 6
Previous:

Что я делаю не так и как это исправить?Я не знаю, если это сравнение строки с INT, но если это так, я буду чувствовать себя глупо.Я пробовал это, но это вызывает ошибку при проверке последнего «Предыдущий:».

Ответы [ 4 ]

2 голосов
/ 04 января 2012

Установите значение prev_line равным значению current_line в конце цикла for.

prev_line = ''

for current_line in x: 
   print "Current: " + current_line
   print "Previous: " + prev_line

   if prev_line > current_line:
       print "Folder"
   elif prev_line == current_line:
       print "Root"

    prev_line = current_line
0 голосов
/ 24 августа 2013

Вы можете использовать эту функцию, которую я создал:

def before(self):
    # get the current cursor position, then
    # store it in memory.
    current_position = self.tell()

    # move back by 1 byte at a time and store
    # that byte's contents into memory.
    _tmp = ""
    _rea = 0
    if "b" in self.mode:
        _tmp = b""

    while True:
        _rea += 1
        # move back x bits and read one byte
        self.handle.seek(current_position - _rea)

        # now we've read one byte
        _tmp += self.handle.read(1)

        # move back one byte again
        self.handle.seek(current_position - _rea)

        # If the string in memory contains the "\n"
        # EOL, we will return the string.

        # alternatively break if the current position
        # is zero.
        if _tmp.count("\n") == 2 or self.tell() == 0:
            break

    # somehow the string is reversed...
    return _tmp[::-1]

Где self.handle - файловый объект. Надеюсь, это поможет!

0 голосов
/ 04 января 2012

Измените код на:

x = open('out.txt','r') 
prev_line='0' 
for current_line in x:    
 print "Current: " + current_line    
 if prev_line != '': 
  print "Previous: " + prev_line    
 if prev_line > current_line:        
  print "Folder"    
 elif prev_line == current_line:        
  print "Root"  
 prev_line=current_line
x.close()

Это должно решить проблему.Для первой строки текущей строкой является '0', но предыдущей строки нет .. поэтому я думаю, что это должно вывести 'Root'.Если мое предположение неверно, тогда измените строку prev_line = '0' на prev_line = ''.

, почему бы не запустить вложенный цикл for и получить значение следующей строки.например, объявить num = 1 в начале кода, а затем запустить вложенный цикл, используя.

x = open('out.txt','r') 
prev_line='0' 
num=1
for current_line in x:
 y=1
 for next_line in x:
  if y=num+1:
   nextline=next_line
  y+=1
 print "Next Line "+next_line
 num+=1
x.close()
0 голосов
/ 04 января 2012

Вы неправильно заявили prev_line.Если current_line читается как '0 \ n', то prev_line равен '0'.И prev_line никогда не превышает current_line.Попробуйте объявить prev_line как полную строку.

prev_line = '0'

for current_line in x: 
    print "Current: " + current_line
    print "Previous: " + prev_line
    if prev_line > current_line:
        print "Folder"
    elif prev_line == current_line:
        print "Root"
    prev_line = current_line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...