Python:读取前一行并与当前行比较

0 投票
4 回答
9647 浏览
提问于 2025-04-17 09:29

我是一名在Windows上使用Python 2.7的新手。我正在努力通过编程的方式创建一个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_linecurrent_line进行比较时,得到的结果都不是我想要的。我可以这样做:if prev_line == "0": print "Root",但这只适用于这个特定情况。而且,似乎if部分在下一个current_line处理之前就已经计算完了。我从当前代码中得到的结果包括:

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:

我哪里做错了,怎么才能修复这个问题?我不知道这是字符串和整数的比较问题,如果真是这样,我会觉得很尴尬。我试过了,但在检查最后一个“Previous:”时会出现错误。

4 个回答

0

把代码改成这样:

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,然后用嵌套的for循环来运行。

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

你声明的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
2

在for循环结束时,把current_line的值赋给prev_line。

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

撰写回答