繁体   English   中英

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

[英]Counting how many times a string appears in a CSV file

我有一段代码可以告诉我一个单词在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出现了Exmple_word1次和2次,依此类推。我被困在那里了一段时间,但它让我开始思考。使用我经常更换的手机上的两个键盘-可能是相同的单词实际上可能会有所不同,并且可以解释为什么我得到了这些结果?

另外,我几乎检查了所有有关此事的消息来源,发现实际上没有按照我希望他们做的事情采取不同的方法。 (例如, value_counts()方法)

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

注意代码中的一些错误:

  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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM