我试图弄清楚如何计算单词标签I-GENE和O出现在文件中的频率数。
我正在尝试计算的文件示例如下:
45 WORDTAG O cortex
2 WORDTAG I-GENE cdc33
4 WORDTAG O PPRE
4 WORDTAG O How
44 WORDTAG O if
我正在尝试计算与类别(例如O)相同的同一类别(例如I-GENE)中的单词[0](第1列)的总和
在这个例子中:
I-GENE类别的单词总和为2
并且O类别的单词总和是97
我的代码:
import os
def reading_files (path):
counter = 0
for root, dirs, files in os.walk(path):
for file in files:
if file != ".DS_Store":
if file == "gene.counts":
open_file = open(root+file, 'r', encoding = "ISO-8859-1")
for line in open_file:
tmp = line.split(' ')
for words in tmp:
for word in words:
if (words[2]=='I-GENE'):
sum = sum + int(words[0]
if (words[2] == 'O'):
sum = sum + int(words[0])
else:
print('Nothing')
print(sum)
答案 0 :(得分:0)
我认为你应该删除单词循环 - 你不使用它
for word in words:
我会使用字典 - 如果你想解决这个问题。 在阅读文件时,请填写以下字典: - 如果你已经拥有dict中的密钥 - >增加它的价值 - 如果是新密钥,则添加到dict,并将值设置为它的值。
def reading_files (path):
freqDict = dict()
...
for words in tmp:
if words[2] not in freqDict():
freqDict[words[2]] = 0
freqDict[words[2]] += int(words[0])
创建字典后,您可以将其返回并与关键字一起使用,或者您可以为该函数传递关键字,并返回该值或只打印它。 我更喜欢第一个 - 使用尽可能少的文件IO操作。您可以使用从内存中收集的数据。
对于这个解决方案,我写了一个包装器:
def getValue(fDict, key):
if key not in fDict:
return "Nothing"
return str(fDict[key])
所以它会像你的榜样一样。
这不是必要的,但是一个好的做法:当你不再使用它时关闭文件。