计算文本文件中列表中字符串的出现次数

时间:2019-12-06 16:42:01

标签: python python-3.x list count

我有一个字符串列表,例如:书名= [书名1,书名2,书名3,...。]

我还有一个文本文件,格式如下: logfile.txt

X person borrowed Book name 1 on Y date Z person borrowed Book name 2 on D date ...

我想知道每本书的借阅次数。因此,我需要计算日志文件中列表“书名”中每个元素的出现次数。最好将结果放在不同的列表中,例如:

书名= [A,b,c,d]

列表生成: 发生率= [1,4,5,0]

我尝试了独裁方法,但是似乎没有用,所以我一直试图获得计数。

我尝试过的事情:

`

file  = open('logfile.txt', 'r').read()
        b = bookname
        count = file.count(b)

        print(count)

`

但这不起作用,因为书名是列表而不是字符串。因此,我的想法是创建一个for循环,在该循环中检查列表书名的每个元素上是否出现了这种情况,但是我不知道如何创建一个可行的书,也找不到适合自己需求的书

1 个答案:

答案 0 :(得分:1)

如果有列表,则应使用for循环分别检查列表中的每个元素。结果,您应该append()列出结果。

booknames = ['Book name 1', 'Book name 2', 'Book name 3']
occurences = []

#text = open('logfile.txt', 'r').read()
text = '''X person borrowed Book name 1 on Y date 
Z person borrowed Book name 2 on D date
...'''

for name in booknames:
    count = text.count(name)
    occurences.append(count)

print(occurences)

结果

[1, 1, 0]

顺便说一句:如果每一行的结构都相似,那么也许您可以得到每一行,并从该行中切断书名,然后使用collections.Counter来计算名字。

import collections 

booknames = ['Book name 1', 'Book name 2', 'Book name 3']
occurences = collections.Counter()

#fh = open('logfile.txt')
fh = '''X person borrowed Book name 1 on Y date 
Z person borrowed Book name 2 on D date
...'''.splitlines()

for line in fh:
    parts = line.split('borrowed', 1)

    if len(parts) < 2:
        print("Can't find 'borrowed' in", line)
        continue

    parts = parts[1].rsplit('on', 1)

    if len(parts) < 0:
        print("Can't find 'on' in", line)
        continue

    name = parts[0].strip()
    print('found:', name)
    occurences.update([name])

print(occurences)

结果

Found: Book name 1
Found: Book name 2
Can't find 'borrowed' in ...
Counter({'Book name 1': 1, 'Book name 2': 1})

然后您可以将booknamesCounter一起使用

for name in booknames:
    print(name, 'occures', occurences[name], 'times')

结果

Book name 1 occures 1 times
Book name 2 occures 1 times
Book name 3 occures 0 times

或作为列表

result = []
for name in booknames:
    result.append( occurences[name] )

print(result)

或更短,具有列表理解力

result = [ occurences[name] for name in booknames ]
相关问题