我正在尝试编写一些python代码来提取数据。它几乎是正确的,但它似乎挂在制作第一个文件的末尾。在某处有无限循环吗?
train = open('mp_crf_train.txt', 'r')
lines = train.readlines()
number = 0
for i in lines:
filename = str(number) + ".txt"
outfile = open(filename,"w")
lst = i.split(' ')
x=1
#while x < len(lst):
for word in lst:
if '<' in word and '/' not in word:
sword = word[1:len(word)-1]
close = '</'+ sword + '>'
while lst[x] != close:
outfile.write(lst[x])
outfile.write(' ')
outfile.write(sword)
outfile.write('\n')
if x!=len(lst)-1:
x=x+1
x=x+1
number = number+1
答案 0 :(得分:3)
这是无限循环的材料。如果你在没有找到lst
的情况下到达close
的末尾,那么你就处于无限循环中,因为你正在防止增加x。如果你 得到索引错误(可能) - 你修复x对长度的修复是导致无限循环的原因。
while lst[x] != close:
...
if x!=len(lst)-1:
x=x+1
你应该使用的是
while x<len(lst) and lst[x] != close:
...
x=x+1
或者因为您似乎不需要x
for item in lst:
if item == close:
break
...
如果您需要跟踪x
for x, item in enumerate(lst):
if item == close:
break
...
答案 1 :(得分:2)
while lst[x] != close:
会永远结束吗? close
中必须list
吗?那个空格怎么样(我认为这是HTML或空白无知的东西)?您假设闭括号完全符合'</'+ sword + '>'
答案 2 :(得分:1)
唯一能成为无限循环的地方就在这里:
while lst[x] != close:
如果lst[x]
从不 close
,将是infinte。在每次迭代时执行print(lst[x])
(或者只检查outfile
中的relvant行),并将其与您的预期进行比较 - 您可能错过了一些微不足道的差异。