2016-03-17 59 views
0

我在下面的代碼塊中遇到了一些問題。 我想要做的就是去通過文件裏逐行,並拉出線以下,其中包含「.W」一條線,直到它達到與「.I」使用嵌套循環的文件迭代給出的StopIteration

with open("cran.all.1400","r") as abstracts: 
abstract_list = [] 
for line in abstracts: 
    if (line.startswith(".W")): 
     abstract_string = "" 
     while not (line.startswith('.I')): 
      abstract_string = abstract_string + line 
      abstracts.next() 
     abstract_list.append(abstract_string) 
開始的行

我遇到了StopIteration,並且一些使用谷歌搜索向我展示了這種情況發生在.next()沒有價值時,但我不知道該如何編寫此代碼。

我不確定具體是什麼,是如何有while循環繼續通過線去,有for循環拿起其中while循環不放過。

回答

1

在for循環使用標誌:

with open("cran.all.1400") as abstracts: 
    inside = False 
    abstract_list = [] 
    for line in abstracts: 
     if line.startswith(".W"): 
      inside = True 
      abstract_list.append("") 
     elif line.startswith(".I"): 
      inside = False 
     elif inside: 
      abstract_list[-1] += line 
+0

這工作正常,謝謝! 沒有行以「.W」開頭(只有下面的行),所以這工作正常。 – wtk219