在Python中获取文本文件中特定单词的计数?
我想要计算某个文本文件中的单词数量。
我试过这样做,但出现了一个错误:“AttributeError: 'list' object has no attribute 'split'”,所以没成功:
words = 0
for wordcount in textfile.readlines().split(":"):
if wordcount == event.getPlayer().getName():
words += 1
有没有更简单或者不那么复杂的方法来做到这一点呢?
这是我的文本文件:
b2:PlayerName:Location{world=CraftWorld{name=world},x=224.23016231506807,y=71.0,z=190.2291303186236,pitch=31.349741,yaw=-333.30002}
我想要查找“PlayerName”,这是玩家的名字。如果玩家的名字出现了5次(也就是说,文件中“PlayerName”这个词写了五次),那么我就想把单词数量加5。
附注:我不确定这样做是否安全,因为这是一个多人游戏,可能会有很多昵称以“PlayerName”开头,比如“PlayerName1337”之类的,这会造成问题吗?
3 个回答
0
你可以通过使用 count 方法来查找一个单词在字符串中出现的次数:
words = textfile.read().count('PlayerName')
1
如果你想一次性统计多个名字,其实有个更简单的方法……可以使用collections模块里的Counter。
from collections import Counter
counter = Counter([line.split(':') for line in textfile.readlines()])
Counter的用法跟字典差不多,这样你就可以一次性统计所有名字,而且如果需要的话,还能高效地查找多个名字的统计结果。
目前你的脚本每次循环只统计一个名字。
你可以这样来获取统计结果:
counter[event.getPlayer().getName()]
我敢打赌,你最终会想要统计多个名字。如果是这样的话,最好不要多次读取文本文件。
1
应该可以工作
words = 0
for wordcount in textfile.read().split(":"):
if wordcount == event.getPlayer().getName():
words += 1
这里的区别是:.readlines()
会生成一个列表,而 .read()
会生成一个字符串,你可以把这个字符串分割成列表。
更好的方法是不会计算错误的东西:
words = 0
for line in textfile.readlines():
# I assume that player name position is fixed
word = line.split(':')[1]
if word == event.getPlayer().getName():
words += 1
是的,如果有玩家的名字相同或者名字里有 :
,这会带来安全隐患。
名字相同的问题是,你的代码不知道某一行属于哪个玩家。
如果玩家的名字里有冒号,你的代码也会把它分开。
我建议你给每个玩家分配一个独特且不变的标识符,并使用数据库来代替文本文件,这样可以更好地处理这些问题。