我有下面的代碼,它不會給出錯誤,但它也不會產生輸出。用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)
我的直覺是問題從「水珠」功能來。但是,正如我之前所說:代碼本身不會給我一個錯誤 - 但它似乎也不會產生輸出。
有人可以幫忙嗎?
我提到的文檔here和here,我似乎無法理解我做錯了什麼。
有人可以通過輸出glob
的結果爲我提供有關如何解決問題的見解。由於我需要處理大量文件。
'glob()'擴展現有的*文件名。這工作得很好。但是'output_file'字符串將不會被擴展;使用字符串格式或連接來生成文件名。 –
但是,這不是你的問題。 'lemma_sense_freqs'上有名稱錯誤;這是函數'sortAndCount'中的一個本地名稱,它永遠不會調用。 –
當我使用一個單獨的文件作爲輸入時,它似乎工作得很好。 'open_file:'''lemma_sense_freqs = sortAndCount(opened_file)''輸出文件=「count.out_ABC.csv」' 'writeOutCsv(output_file,lemma_sense_freqs)' – owwoow14