0

我有以下代码,它不会给出错误,但也不会产生输出。

该脚本用于执行以下操作:

  • 该脚本采用 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)

我的直觉是问题来自“glob”函数。但是,正如我之前所说:代码本身不会给我一个错误——但它似乎也没有产生输出。

有人可以帮忙吗?

我在这里这里参考了文档,我似乎无法理解我做错了什么。

有人可以通过输出结果为我提供有关如何解决问题的见解glob。由于我需要处理大量文件。

4

1 回答 1

1

关于您的原始代码, *lemma_sense_freqs* 未定义,因为它应该由函数sortAndCount()返回。你永远不会调用那个函数。例如,您的代码中有第二个函数,称为writeOutCsv。您定义它,然后在最后一行实际调用它。

虽然您从不调用函数sortAndCount()(它应该返回 *lemma_sense_freqs* 的值)。因此,错误。

我不知道你想用那个代码实现什么,但你肯定需要在某个点(在最后一行之前尝试)写这样的东西

lemma_sense_freqs = sortAndCount(input_file)

这是您调用所需函数的方式,然后 lemma_sense_freqs 将具有关联的值,您不应该得到错误。

我不能更具体,因为不清楚你想用该代码实现什么。但是,您目前只是遇到了一个基本问题(您定义了一个函数,但从未使用它来检索值 lemma_sense_freqs)。尝试添加我建议的代码并使用它。

于 2013-10-25T10:57:59.127 回答