0

次のコードがありますが、エラーは発生しませんが、出力も生成されません。

スクリプトは、次のことを行うように作成されています。

  • このスクリプトは、タブで区切られた 4 つの列の入力ファイルを受け取ります。

  • 次に、列 1 で一意の値をカウントし、列 4 (2 つの異なるタグ: C と D を含む) で対応する値の頻度をカウントします。

  • 出力は、列 1 の一意の値とそれに対応する列 4 の値の頻度を含む 3 つのタブで区切られた列です。列 2 にはタグ C に対応する列 1 の文字列の頻度があり、列 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)

私の直感は、問題は「グロブ」関数から来ているということです。しかし、前に言ったように、コード自体はエラーになりませんが、出力も生成されないようです。

誰か助けてくれませんか?

ここここのドキュメントを参照しましたが、何が間違っているのか理解できないようです。

から結果を出力して問題を解決する方法について、誰かが私に洞察を提供してくれますかglob。大量のファイルを処理する必要があるため。

4

1 に答える 1