在Python中获取txt文件中特定单词的计数?
我正在尝试获取某个txt文件中的字数 我已尝试过此操作,但由于“AttributeError:“list”对象没有属性“split”,因此无法正常工作: 有没有更简单或更简单的方法 这是我的文本文件:在Python中获取txt文件中特定单词的计数?,python,Python,我正在尝试获取某个txt文件中的字数 我已尝试过此操作,但由于“AttributeError:“list”对象没有属性“split”,因此无法正常工作: 有没有更简单或更简单的方法 这是我的文本文件: b2:PlayerName:Location{world=CraftWorld{name=world},x=224.23016231506807,y=71.0,z=190.2291303186236,pitch=31.349741,yaw=-333.30002} 我想要的是搜索“PlayerNa
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次),它将在单词中添加+5
另外,我不确定这是否有利于安全,因为这是一款多人游戏,所以可能会有很多以“PlayerName”开头的昵称,例如“PlayerName 1337”或其他什么,这会导致问题吗?应该可以
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
是的,如果有同名或名字中有:
的玩家,则存在安全问题
我敦促您为每个玩家分配某种唯一的不可变标识符,并使用数据库而不是文本文件来为您处理所有这些内容。如果您想同时计算多个姓名,有一种更简单的方法。。。使用“集合”模块中的计数器
from collections import Counter
counter = Counter([line.split(':') for line in textfile.readlines()])
将像dict一样运行,因此您将一次计算所有名称,如果需要,您可以高效地查找多个名称的计数
目前,脚本在每个循环中一次只计算一个名称
您可以这样访问计数
counter[event.getPlayer().getName()]
我打赌你最终会想数一数不止一个名字。如果您这样做,您应该避免多次读取文本文件。您可以通过以下方式找到一个单词在字符串中出现的次数:
使用某种后端存储数据库怎么样?那会节省你很多时间。
counter[event.getPlayer().getName()]
words = textfile.read().count('PlayerName')