Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中获取txt文件中特定单词的计数?_Python - Fatal编程技术网

在Python中获取txt文件中特定单词的计数?

在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

我正在尝试获取某个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}
我想要的是搜索“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')