从文本文件中读取并将文字频率保存到新文本文件中,然后在新行上打印每个文件
美好的一天。请帮助。使用的语言是python。下面的代码从一个文本文件中读取,然后将每个单词的频率返回到新行中。我是从这个网站https://rmtheis.wordpress.com/2012/09/26/count-word-frequency-with-python/从文本文件中读取并将文字频率保存到新文本文件中,然后在新行上打印每个文件
import re
from collections import Counter
def openfile(filename):
fh = open(filename, "r+")
str = fh.read()
fh.close()
return str
def removegarbage(str):
# Replace one or more non-word (non-alphanumeric) chars with a space
str = re.sub(r'\W+', ' ', str)
str = str.lower()
return str
def getwordbins(words):
cnt = Counter()
for word in words:
cnt[word] += 1
return cnt
def main(filename, topwords):
txt = openfile(filename)
txt = removegarbage(txt)
words = txt.split(' ')
bins = getwordbins(words)
for key, value in bins.most_common(topwords):
print(key, value)
main('hamlet.txt', 500)
从上面的,它打印精美的IDE我使用(pyCharm)。但是,当我补充一点,上面的代码下面的下面的代码,
#Write to file
with open("newFile.txt", "w") as f:
for word in main('hamlet.txt', 500):
f.write(word + os.linesep)
它打印在控制台不错,但显示了一些错误,也是它没写文本文件我创建在所有。 。下面是显示在控制台上的示例输出一个片段阅读的文本文件后,它打印:
the 16
of 12
to 9
search 9
which 6
所以,现在,我希望写这上面的输出到纺织的文本文件。该内容要长得多比以上。谢谢。顺便说一句,误差在控制台上得到的是
Traceback (most recent call last):
File "/Users/test/PycharmProjects/Trial/trial.py", line 52, in <module>
for word in main("hamlet.txt", 500):
TypeError: 'NoneType' object is not iterable
,如果你想使用的功能main
如图所示,即
for word in main('hamlet.txt', 500):
那么函数应适应这一点。 人们可以使用例如发电机:
def main(filename, topwords):
txt = openfile(filename)
txt = removegarbage(txt)
words = txt.split(' ')
bins = getwordbins(words)
for key, value in bins.most_common(topwords):
# yield key #generate only the word, not it's frequency
yield key, value
with open("newFile.txt", "w") as f:
for word, freq in main('hamlet.txt', 500):
f.write('%s\t%d\n' % (word, freq))
您需要return key, value
,而不是打印出来
谢谢你的回应。我跟着你的指示,我没有改变任何东西,而不是从(返回键,价值)到(返回键,值),但我似乎甚至没有运行在这一次。它显示一个错误。 – user3761841
有关TypeError的一些信息:不支持的操作数类型为+:'int'和'str' – user3761841
我按照您的指示进行了尝试。它保存到纺织品中,但只保存了一个字,并且没有显示频率。我现在可以做什么?谢谢。 – user3761841
谢谢你的答复。我尝试了你的建议。它确实节省了纺织品,但没有显示频率。但就像我之前说过的,结果必须保存在文本文件中,并且也保存在频率中。就像我上面显示的示例输出一样。所以请你怎么能帮助我呢?再次感谢... – user3761841
@ user3761841在这种情况下,发生器可以产生两个值。这些被写入输出文件。我已经相应地更新了答案。 – ewcz
'那就是诀窍....哇,非常感谢。 Python似乎有点奇怪,虽然..我来自Java背景... Thankssss很多..' – user3761841