首页 文章

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

提问于
浏览
0

我有一段代码应该告诉我一个单词出现在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 回答

  • 2

    注意代码中的一些错误:

    • key_word1 or key_word2 - 它's 33041 , meaning if the left part - 33042 evaluated to True, it won'甚至看看key_word2 . 只有当key_word1出现在该行中时,才会导致检查 .

    一个强化的例子:

    w1 = 'word1'
    w2 = 'word2' 
    s = 'bla word2'
    (w1 or w2) in s
    >> False 
    (w2 or w1) in s
    >> True
    
    1. Reading csv file :我建议使用csv包(只需导入它),如:
    import csv
    with open('PATH_TO_FILE.csv') as f:
        for line in csv.reader(f):
             # do you logic here
    
    • Case sensitivity - 不要努力,你可能可以小写你读的行,只是不能容纳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
    

相关问题