如何在python中计算文件中的单词频率
我有一个.txt文件,格式如下如何在python中计算文件中的单词频率,python,Python,我有一个.txt文件,格式如下 C V EH A IRQ C C H IRG V 虽然它显然比那个大很多,但本质上就是它。基本上我试图求出每个字符串在文件中的总次数(每个字母/字符串位于单独的行上,因此从技术上讲,文件是C\nV\nEH\n等。但是,当我尝试将这些文件转换为列表,然后在上使用count函数时,它会分离字母,以便诸如“IRQ”之类的字符串是['\n'I'、'R'、'Q'、'\n']所以当我计算它时,我得到的是每个字母的频率,而不是字符串的频率 这是我到目前为止写的代码 def c
C
V
EH
A
IRQ
C
C
H
IRG
V
虽然它显然比那个大很多,但本质上就是它。基本上我试图求出每个字符串在文件中的总次数(每个字母/字符串位于单独的行上,因此从技术上讲,文件是C\nV\nEH\n等。但是,当我尝试将这些文件转换为列表,然后在上使用count函数时,它会分离字母,以便诸如“IRQ”之类的字符串是['\n'I'、'R'、'Q'、'\n']所以当我计算它时,我得到的是每个字母的频率,而不是字符串的频率
这是我到目前为止写的代码
def countf():
fh = open("C:/x.txt","r")
fh2 = open("C:/y.txt","w")
s = []
for line in fh:
s += line
for x in s:
fh2.write("{:<s} - {:<d}".format(x,s.count(x))
将
s+=line
更改为s.extend(line.split())
。+=
运算符用于将两个序列相加,字符串被视为一个字符序列。您可以使用list.append
(例如,s.append(line)
)将整行作为单个条目添加到列表中,或使用list.extend
添加字符串列表
在本例中,我使用line.split()
将行拆分为单个单词,然后将单词列表添加到当前列表中。如果每行仅包含一个单词,则可以使用s.append(line)
。使用,然后使用strip()
删除\n
:
from collections import Counter
with open('x.txt') as f1,open('y.txt','w') as f2:
c=Counter(x.strip() for x in f1)
for x in c:
print x,c[x] #do f2.write() here if you want to write them to f2
输出:
A 1
C 3
EH 1
IRQ 1
V 2
H 1
IRG 1
如果您有Python
2.7
或3.1
,但是2.6
和3.0
没有集合,那么Ashwini的答案是好的。Counter
为了便于移植到这些旧版本,您最好使用。是否必须使用python?
sort yourfile.txt | uniq-c
将提供字数(您提到c:\所以您似乎在windows上,sort
和uniq
是标准的unix命令,如果您安装cygwin或.@There from here-我认为OP需要字数计算。python代码以其书写方式生成字母计数。sort
和uniq
从技术上会生成行计数。不确定这是否正确。字数计算,只是其中一些单词碰巧由单个字母组成,这是用于生物学研究的.至于用python实现,that和R是我唯一熟悉的语言,我想在python@D.Shawley是的,很抱歉我误读了-只喝了一杯咖啡><删除了我的评论。@therefromhere-“word”不必是“英语单词”。不过,字符串对OP的使用会更好。这里有一个collect离子。计数器
应该与2.5和2.6一起使用。此外,这个答案可能是一个注释。
A 1
C 3
EH 1
IRQ 1
V 2
H 1
IRG 1