2017-08-08 87 views
-5

當我試圖嵌套這個for循環時,我不斷收到一個縮進錯誤,我不明白爲什麼。當我將它與嵌套在搜索欄[i-3:i + 3]中的「for-l」相同時,它會運行:「我只是在學習,所以我明白它可能不是最簡潔的代碼。謝謝你的時間。縮進錯誤沒有意義 - Python

ne=pd.DataFrame() 

    for word in keywordList:  
     for i, line in enumerate(searchlines): 
      if word in line: 
      for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
    ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
      #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
      normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
      lowerCaseLine = normalCaseLine.lower() 
      result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
    ### Get Detail Keywords 
      cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
      cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
    ### Enter here if we need to seperate words ex. Tech Keywords 

      ner_output = st.tag(str(cleanNormLine).split()) 
      chunked, pos = [], prev_tag=[], "" 
    ERROR IS HERE!! 
        for i, word_pos in enumerate(ner_output): 
           word, pos = word_pos 
           if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
            chunked[-1]+=word_pos 
           else: 
               chunked.append(word_pos) 
               prev_tag = pos 

      clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

    ### Write Results to Combined file 
      midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
    ### Create NER DataFramez 

      nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
      nerTagDF['File_Name'] = fileName 
      nerTagDF['Line Key'] = str(i) 
      ne = ne.append(nerTagDF) 

    oFile.close() 
    midFile.close() 
+5

很抱歉,但你的代碼是一個爛攤子,這是不必閱讀所有的縮進不一致,而不是在同一深度的每一個控制點的線條清晰。例如立即:'在wordpress關鍵詞列表中:對於i,在枚舉行(searchlines)中爲: 如果在一行中:'在第一個塊縮進中有4個空格,但隨後爲2個空格,並且這貫穿整個其餘的代碼 – EdChum

+0

是的,更不用說,這是縮進錯誤,而不是縮進:)只需將它重新寫入/複製粘貼到新窗口/選項卡/文件中逐行。 – StefanK

+0

每一層壓痕應該是4個空格。看看這個部分,看起來它超過了4個,可能是8個或更多。 – mauve

回答

0

您的for循環沒有嵌套在任何東西中。在Python中,使用縮進的一個地方是在某個範圍內定義了一段代碼,例如在whilefor循環內,在if語句中,或定義某個函數時。

您的for循環在chunked, pos = [], prev_tag=[], ""之後縮進,這只是一個獨立的語句。因此,您需要取消縮進循環,直到它與周圍代碼的縮進匹配。這可能是我可以說的最一般的方式。

1

一個額外的輕微標籤空間錯誤消息

# -*- coding: utf-8 -*- 

「」 近給予 「創建於星期二八月 08十八時48分四十秒2017年

@author:用戶 」「」

NE = pd.DataFrame()

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
     for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
     #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
     normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
     lowerCaseLine = normalCaseLine.lower() 
     result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
### Get Detail Keywords 
     cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
     cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
### Enter here if we need to seperate words ex. Tech Keywords 

     ner_output = st.tag(str(cleanNormLine).split()) 
     chunked, pos = [], prev_tag=[], "" 
#ERROR IS HERE!! 
       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
         chunked[-1]+=word_pos 
        else: 
         chunked.append(word_pos) 
         prev_tag = pos 

     clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

### Write Results to Combined file 
     midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
### Create NER DataFramez 

     nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
     nerTagDF['File_Name'] = fileName 
     nerTagDF['Line Key'] = str(i) 
     ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close() 

請徹ck的代碼...希望它能解決你的問題...

0

請清理你的代碼。看起來錯誤是錯誤消息之後的錯誤:

... 
chunked, pos = [], prev_tag=[], "" 
ERROR IS HERE!! 
       for i, word_pos in enumerate(ner_output): 
... 

爲什麼對於循環行如此過度縮進?它應該看起來像這樣:

chunked, pos = [], prev_tag=[], "" 
# ERROR IS HERE!! 
for i, word_pos in enumerate(ner_output): 
    # and then pick it up at this indentation 

雖然您的縮進不一致。看看這裏,向着開頭:

1 for word in keywordList:  
2  for i, line in enumerate(searchlines): 
3   if word in line: 
4   for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
5 ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
6   #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
7   normalCaseLine = searchlines[ 

讓我們通過這條線由行:第1行縮進了4個空格。這意味着從這裏開始的每個縮進應該是四的倍數。第2行:還有四個空間,迄今爲止非常好。第三行:從第二行縮進的只有兩個空格:不好。應該是比第2行更加縮進的四個空格。第4行:再次,兩個空格。而且你應該把它分成兩行,甚至可以把它分成三行,並且在自己的行上加註釋。 for(...):,然後oFile.write(...與四個空格縮進不同的行上。第6行和第7行看起來應該縮進,因爲第4行很容易混淆。第5行,即使它是註釋,應該進一步縮進以匹配上一行,除非上一行是for(...):行,在這種情況下,它應該縮進四位以上。

+0

爲什麼downvote? –

+0

我發現這很有用,不知道爲什麼投票。 – user3473269

+0

如果你發現它有用,請隨時upvote,並接受答案,如果它解決了你的問題:) –

0

當你第一次使用Python時,通常會出現縮進錯誤。

我的建議是隻使用製表符來縮進代碼 或空格。 因爲在編譯時,python編譯器無法處理兩者的混合。

我沒有檢查你的代碼,但它不可讀。 您可能希望使用帶有PEP8 Autoformat規則的編輯器或自己重新設置代碼格式。

這裏是你的代碼的編譯版本:

ne=pd.DataFrame() 

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
      for l in searchlines[i-3:i+3]: 
       oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) 
       ## prints Unused MidFile for Reference 
       ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
       #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
       normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + \ 
        searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + \ 
        searchlines[i+3].rstrip('\n') 
       lowerCaseLine = normalCaseLine.lower() 
       result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
       ### Get Detail Keywords 
       cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
       cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
       ### Enter here if we need to seperate words ex. Tech Keywords 

       ner_output = st.tag(str(cleanNormLine).split()) 
       chunked, pos = [], prev_tag=[], "" 
       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
         chunked[-1]+=word_pos 
        else: 
         chunked.append(word_pos) 
         prev_tag = pos 

       clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

     ### Write Results to Combined file 
     midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
     ### Create NER DataFramez 

     nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
     nerTagDF['File_Name'] = fileName 
     nerTagDF['Line Key'] = str(i) 
     ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close() 
0

這裏是固定的縮進你的代碼。您應確保縮進在您的代碼中始終保持一致,而不是空格和製表符的組合。

ne=pd.DataFrame() 

for word in keywordList:  
    for i, line in enumerate(searchlines): 
     if word in line: 
      for l in searchlines[i-3:i+3]: oFile.write(fileName + delim + word + delim +str(i) + delim +str(l)) ## prints Unused MidFile for Reference 
      ### Creates normal case line for Named Entity recognition & all Lower Case line for flagging keywords 
       #normalCaseLine = str(searchlines[i-3] + searchlines[i-2] + searchlines[i-1] + searchlines[i] + searchlines[i+1] + searchlines[i+2] + searchlines[i+3]).replace('\n',' ') 
      normalCaseLine = searchlines[i-3].rstrip('\n') + searchlines[i-2].rstrip('\n') + searchlines[i-1].rstrip('\n') + searchlines[i].rstrip('\n') + searchlines[i+1].rstrip('\n') + searchlines[i+2].rstrip('\n') + searchlines[i+3].rstrip('\n') 
      lowerCaseLine = normalCaseLine.lower() 
      result = dict((key, len(list(group))) for key, group in groupby(sorted(lowerCaseLine.split()))) 
      ### Get Detail Keywords 
      cleanResult = {word: result[word] for word in result if word in detailKeywordList} 
      cleanNormLine = normalCaseLine.replace('\x92s',' ').replace('\x92s',' ').replace('\x96',' ').replace('\x95',' ') 
      ### Enter here if we need to seperate words ex. Tech Keywords 

      ner_output = st.tag(str(cleanNormLine).split()) 
      chunked, pos = [], prev_tag=[], "" 

       for i, word_pos in enumerate(ner_output): 
        word, pos = word_pos 
        if pos in ['PERSON', 'ORGANIZATION', 'LOCATION','DATE','MONEY'] and pos == prev_tag: 
          chunked[-1]+=word_pos 
        else: 
           chunked.append(word_pos) 
           prev_tag = pos 

      clean_chunkedd = [tuple([" ".join(wordpos[::2]), wordpos[-1]]) if len(wordpos)!=2 else wordpos for wordpos in chunked] 

      ### Write Results to Combined file 
      midFile.write(fileName+'-'+str(i)+delim+word+delim+str(cleanNormLine)+delim+str(str(cleanResult).split(','))+'\n') 
      ### Create NER DataFramez 

      nerTagDF = DataFrame(clean_chunkedd, columns = ['Word','Classification']) 
      nerTagDF['File_Name'] = fileName 
      nerTagDF['Line Key'] = str(i) 
      ne = ne.append(nerTagDF) 

oFile.close() 
midFile.close()