Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算多个文件中的字频_Python_Python 3.x_Frequency_Word Frequency - Fatal编程技术网

Python 计算多个文件中的字频

Python 计算多个文件中的字频,python,python-3.x,frequency,word-frequency,Python,Python 3.x,Frequency,Word Frequency,我试图编写一个代码来计算包含大约10000个文件的文档中单词出现的频率,但是我没有得到总体频率,而是得到最后一个文件的单词数,因为它将覆盖上一次迭代。到目前为止,我的代码是: import csv import glob import re def main(): file_list = glob.glob(TARGET_FILES) for file in file_list: with open(file, 'r', encoding='UTF-8', e

我试图编写一个代码来计算包含大约10000个文件的文档中单词出现的频率,但是我没有得到总体频率,而是得到最后一个文件的单词数,因为它将覆盖上一次迭代。到目前为止,我的代码是:

import csv
import glob
import re


def main():
    file_list = glob.glob(TARGET_FILES)
    for file in file_list:
        with open(file, 'r', encoding='UTF-8', errors='ignore') as f_in:
             doc = f_in.read()

 def get_data(doc):    

     vdictionary = {}
     w = csv.writer(open("output1.csv", "w",newline=''))
     tokens = re.findall('\w+', doc)  
     for token in tokens:
        if token not in vdictionary:
             vdictionary[token] = 1
        else:
             vdictionary[token] += 1
     for key, val in vdictionary.items():
        w.writerow([key, val])

我认为问题在于每次迭代都会清空csv文件。如果您使用:

w = csv.writer(open("output1.csv", "a",newline=''))
而不是

w = csv.writer(open("output1.csv", "w",newline=''))
??我猜你会得到每个文件的计数。如果是这种情况,您应该制作一个字典,为每个文件更新字典,并且只在最后将其写入csv文件

您可以得到一本这样的词典:

 def get_data(doc, vdictionary):
     tokens = re.findall('\w+', doc)  
     for token in tokens:
         if token not in vdictionary:
             vdictionary[token] = 1
         else:
             vdictionary[token] += 1
     return vdictionary

 def main():
     files = {get your files}
     vdictionary = {}
     for file in files:
           vdictionary = get_data(file, vdictionary)
     w = csv.writer(open("output1.csv", "w",newline=''))
     for key, val in vdictionary.items():
        w.writerow([key, val])

我认为问题在于每次迭代都会清空csv文件。如果您使用:

w = csv.writer(open("output1.csv", "a",newline=''))
而不是

w = csv.writer(open("output1.csv", "w",newline=''))
??我猜你会得到每个文件的计数。如果是这种情况,您应该制作一个字典,为每个文件更新字典,并且只在最后将其写入csv文件

您可以得到一本这样的词典:

 def get_data(doc, vdictionary):
     tokens = re.findall('\w+', doc)  
     for token in tokens:
         if token not in vdictionary:
             vdictionary[token] = 1
         else:
             vdictionary[token] += 1
     return vdictionary

 def main():
     files = {get your files}
     vdictionary = {}
     for file in files:
           vdictionary = get_data(file, vdictionary)
     w = csv.writer(open("output1.csv", "w",newline=''))
     for key, val in vdictionary.items():
        w.writerow([key, val])

我认为您的问题是,每次调用get_data时,您都在用该文件中的计数重写csv(我认为)。相反,您可以创建一个字典,然后对所有文件的每个文件中的每个单词进行遍历和计数,然后输出到
w.writerow([key,val])


本质上,不要每次浏览文件时都输出到csv。浏览所有文件,更新一个主词典,然后输出到csv

我认为您的问题是,每次调用get_data时,您都在用该文件中的计数重写csv(我认为)。相反,您可以创建一个字典,然后对所有文件的每个文件中的每个单词进行遍历和计数,然后输出到
w.writerow([key,val])


本质上,不要每次浏览文件时都输出到csv。浏览所有文件,更新一个主词典,然后输出到csv

您的代码定义了两个从未调用过的函数。他们甚至不打电话给对方。当您的代码是这样一个不完整的程序时,很难判断它应该做什么。但是我注意到输出文件的名称是硬编码的(“output1.csv”)。您可以在每次迭代中选择不同的文件名,也可以在追加模式下打开文件并将所有结果写入同一个文件。不管怎么说,我们需要一份工作。如果没有关于预期结果的任何信息,我们无法调试无法工作的代码。似乎每次迭代都会覆盖(基于提供的内容)是正确的。我建议将您的信息存储到
列表中
,这样您就不会被覆盖。您似乎还没有包含所有的代码。(从未调用
get_data
main
函数)您的代码定义了两个从未调用过的函数。他们甚至不打电话给对方。当您的代码是这样一个不完整的程序时,很难判断它应该做什么。但是我注意到输出文件的名称是硬编码的(“output1.csv”)。您可以在每次迭代中选择不同的文件名,也可以在追加模式下打开文件并将所有结果写入同一个文件。不管怎么说,我们需要一份工作。如果没有关于预期结果的任何信息,我们无法调试无法工作的代码。似乎每次迭代都会覆盖(基于提供的内容)是正确的。我建议将您的信息存储到
列表中
,这样您就不会被覆盖。您似乎还没有包含所有的代码。(从未调用
get_data
main
函数)追加不起作用,因为我认为他想要在所有文件中计算一个单词的数量。如果一个单词出现在多个文件中,如果他附加了,它将有单独的条目。@WilliamGodel你说得对,谢谢。快速测试仍然很有用,以确定这是否确实是导致错误的原因。我添加了一点说明如何从那里继续。Np。你是对的,如果append有效,它就可以识别问题。append无效,因为我认为他需要在所有文件中计算一个单词的数量。如果一个单词出现在多个文件中,如果他附加了,它将有单独的条目。@WilliamGodel你说得对,谢谢。快速测试仍然很有用,以确定这是否确实是导致错误的原因。我添加了一点说明如何从那里继续。Np。你是对的,如果append起作用,它就能识别问题。