计算一个字符串在CSV文件中出现的次数

时间:2018-12-09 19:00:04

标签: python csv dataframe

我有一段代码应该告诉我一个单词在CSV文件中出现了多少次。注意:文件很大(2年的短信) 这是我的代码:

key_word1 = 'Exmple_word1'
key_word2 = 'Example_word2'
counter = 0
with open('PATH_TO_FILE.csv',encoding='UTF-8') as a:
for line in a:
    if (key_word1 or key_word2) in line:
        counter = counter + 1
print(counter)

有两个词,因为我不知道如何使其不区分大小写。 为了对其进行测试,我在整个文件中使用了单词中的find函数(因为我可以在其中进行不区分大小写的搜索,所以仅使用其中一个单词),并且得到的代码是我计算出的代码的两倍以上。

起初,我确实使用了value_counts()函数,但是我为同一个单词接收了不同的值(搜索Exmple_word1出现了32、56次和2次,依此类推。有一阵子,但让我开始思考。我在手机上使用了两个键盘,这些键盘会定期更换-可能是相同的单词实际上可能会有所不同,并且可以解释为什么我得到了这些结果吗?

此外,我几乎检查了所有有关此问题的消息源,发现了实际上无法实现我希望他们做的事情的不同方法。 (例如value_counts()方法)

如果是这种情况,我该如何解决?

1 个答案:

答案 0 :(得分:2)

请注意您的代码中的一些错误:

  1. key_word1或key_word2 -它是“惰性”,表示如果左侧部分-“ key_word1”评估为True,则甚至不会查看key_word2。仅当key_word1出现在行中时,这才引起检查。

举个例子:

w1 = 'word1'
w2 = 'word2' 
s = 'bla word2'
(w1 or w2) in s
>> False 
(w2 or w1) in s
>> True

2。 读取csv文件:我建议使用csv包(只需将其导入),就像这样:

import csv
with open('PATH_TO_FILE.csv') as f:
    for line in csv.reader(f):
         # do you logic here
  1. 区分大小写-不用努力,您可能会小写阅读的行,仅保留不超过2个单词。

猜测正在寻找的解决方案应该类似于:

import csv
word_to_search = 'donald'
with open('PATH_TO_FILE.csv', encoding='UTF-8') as f:
    for line in csv.reader(f):
         if any(word_to_search in l for l in map(str.lower, line)):
              counter += 1

根据输入运行:

bla,some other bla,donald rocks
make,who,great
again, donald is here, hura

将得到:

counter=2