2013-10-25 70 views
0

我有下面的代碼,它不會給出錯誤,但它也不會產生輸出。用Python Glob輸出//找不到Python代碼中的錯誤

該腳本被製成執行以下操作:

  • 腳本需要4製表符分隔的列的輸入文件:

  • 然後,它計算在第1列和頻率的唯一值列4中的相應值(其中包含2個不同的標籤:C和D)。

  • 輸出是3個製表符分隔的列,它們包含列1的唯一值及其在列4中的值的相應頻率:列2具有列1中對應於標記C和列3的字符串的頻率與標籤D.

在這裏對應於第1列的串的頻率是輸入的一個示例:

algorithm-n like-1-resonator-n 8.1848 C 
algorithm-n produce-hull-n 7.9104 C 
algorithm-n like-1-resonator-n 8.1848 D 
algorithm-n produce-hull-n 7.9104 D 
anything-n about-1-Zulus-n 7.3731 C 
anything-n above-shortage-n 6.0142 C 
anything-n above-1-gig-n 5.8967 C 
anything-n above-1-magnification-n 7.8973 C 
anything-n after-1-memory-n 2.5866 C 

,這裏是所希望的輸出的一個示例:

algorithm-n 2 2 
anything-n  5 0 

我使用的代碼如下(其中一個會看到考慮到所有的意見建議):

from collections import defaultdict, Counter 


def sortAndCount(opened_file): 
    lemma_sense_freqs = defaultdict(Counter)  
    for line in opened_file: 
     lemma, _, _, senseCode = line.split() 
     lemma_sense_freqs[lemma][senseCode] += 1 
    return lemma_sense_freqs 

def writeOutCsv(output_file, input_dict): 
    with open(output_file, "wb") as outfile: 
     for lemma in input_dict.keys(): 
      for senseCode in input_dict[lemma].keys(): 
       outstring = "\t".join([lemma, senseCode,\ 
       str(input_dict[lemma][senseCode])]) 
       outfile.write(outstring + "\n") 

import os 
import glob 


folderPath = "Python_Counter" # declare here 

for input_file in glob.glob(os.path.join(folderPath, 'out_')): 
    with open(input_file, "rb") as opened_file: 
     lemma_sense_freqs = sortAndCount(input_file) 
    output_file = "count_*.csv" 
    writeOutCsv(output_file, lemma_sense_freqs) 

我的直覺是問題從「水珠」功能來。但是,正如我之前所說:代碼本身不會給我一個錯誤 - 但它似乎也不會產生輸出。

有人可以幫忙嗎?

我提到的文檔herehere,我似乎無法理解我做錯了什麼。

有人可以通過輸出glob的結果爲我提供有關如何解決問題的見解。由於我需要處理大量文件。

+0

'glob()'擴展現有的*文件名。這工作得很好。但是'output_file'字符串將不會被擴展;使用字符串格式或連接來生成文件名。 –

+0

但是,這不是你的問題。 'lemma_sense_freqs'上有名稱錯誤;這是函數'sortAndCount'中的一個本地名稱,它永遠不會調用。 –

+0

當我使用一個單獨的文件作爲輸入時,它似乎工作得很好。 'open_file:'''lemma_sense_freqs = sortAndCount(opened_file)''輸出文件=「count.out_ABC.csv」' 'writeOutCsv(output_file,lemma_sense_freqs)' – owwoow14

回答

1

關於您的原始代碼,* lemma_sense_freqs *未定義,因爲它應該由函數sortAndCount()返回。而你從來沒有稱過這個功能。 例如,您的代碼中有第二個函數,稱爲writeOutCsv。你定義它,然後在最後一行中實際調用它。

儘管您從不稱呼函數sortAndCount()(這是應返回* lemma_sense_freqs *的值的函數)。因此,錯誤。

我不知道你想與代碼完全實現的東西,但你絕對需要在某一點(試行的最後一行之前)寫像這樣

lemma_sense_freqs = sortAndCount(input_file) 

這是方法你調用你需要的函數,然後lemma_sense_freqs將會有一個相關的值,你不應該得到錯誤。

我不能更具體,因爲它不清楚你想用該代碼實現什麼。但是,您目前只是遇到了一個基本問題(您定義了一個函數,但從未使用它來檢索lemma_sense_freqs的值)。嘗試添加我建議的一段代碼並與之一起玩。

+0

謝謝你的友善迴應Albz。我遵循你的指示,現在我沒有收到任何錯誤 - 正如我在修訂後的問題中指出的那樣。然而,沒有任何事情發生 - 沒有錯誤,沒有輸出。 – owwoow14