我试图获取某个txt文件中的单词数量。
我已尝试过此操作,但由于" 属性错误:' list'对象没有属性' 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。
P.S。我不确定这是否有利于安全性,因为它是一款多人游戏,所以它可能是许多以" PlayerName"开头的昵称。例如" PlayerName1337"或者其他什么,这会导致问题吗?
答案 0 :(得分: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
是的,如果有名字相同或名字中有:
的玩家,则存在安全问题。
名称相同的问题是您的代码不知道什么 玩家一条线属于。
如果玩家名称中有冒号,您的代码也会将其拆分。
我建议您为每个玩家分配一些独特的不可变标识符,并使用数据库而不是文本文件来处理所有这些内容。
答案 1 :(得分:1)
如果你想一次统计多个名字,有一种更简单的方法...使用收集模块中的计数器
from collections import Counter
counter = Counter([line.split(':') for line in textfile.readlines()])
Counter的行为类似于dict,因此您将立即统计所有名称,如果需要,您可以有效地查找多个名称的计数。
目前,您的脚本每个循环一次只计算一个名称
您可以像这样访问计数
counter[event.getPlayer().getName()]
我打赌你最终会想要多个名字。如果这样做,你应该避免多次阅读文本文件。
答案 2 :(得分:0)
您可以在count字符串中找到单词出现的次数:
words = textfile.read().count('PlayerName')