在Python中获取txt文件中某些单词的计数?

时间:2014-04-07 13:31:38

标签: python

我试图获取某个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"或者其他什么,这会导致问题吗?

3 个答案:

答案 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. 名称相同的问题是您的代码不知道什么 玩家一条线属于。

  2. 如果玩家名称中有冒号,您的代码也会将其拆分。

  3. 我建议您为每个玩家分配一些独特的不可变标识符,并使用数据库而不是文本文件来处理所有这些内容。

答案 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')