如何检查csv文件是否包含字符串?

时间:2013-08-29 18:51:17

标签: python csv

我试图创建一个简单的单词游戏,我需要检查玩家写入的单词是否在字典中。

现在,我能够逐行检查,但它不是很有效所以我希望有更好的方法

import csv

word = raw_input('write your word')

def dict_test(word):
    with open('/home/patryk/Pulpit/slownik.csv', 'r') as dictionary:
        reader = csv.reader(dictionary, delimiter = ' ')

        for row in reader:

             if word not in row:
                print word + ' it doesnt exist in dictionary'
             elif word in row:
                print word + ' ### OK ### '
dict_test(word)

2 个答案:

答案 0 :(得分:0)

如果可以将csv文件读入列表中,并且在列表的每个元素中都有一个单词,则可以使用"word" in dictionary_list来完成。我按字母顺序排列列表,然后通过二进制搜索更快地搜索。 bisect模块使用二进制搜索,并包含索引函数的配方:

from bisect import bisect_left
def index(a, x):
'Locate the leftmost value exactly equal to x'
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
    return i
raise ValueError

然后你可以使用这个

try:
    i = index(dictionary_list,word):
    print word + "== Ok =="
except ValueError:
    print word, "doesn't exist in dictionary"

但是我觉得这样做太过分了:将字典读入内存会很快。

答案 1 :(得分:0)

如果您的csv文件是静态文件(除了主脚本之外没有任何进程正在更新它),那么您实际上是在寻找set of words(您可以使用set - 我会使用dict给出一个示例)我不记得,但我认为比使用set更快))

您可以执行以下操作

import csv

word_dict = {}

def dict_test(word):
   if word_dict.get(word):
      print word + "### OK ###"
   else:
      print word + "is not in dictionary"

def load_words():
    with open('/home/patryk/Pulpit/slownik.csv', 'r') as dictionary:
        reader = csv.reader(dictionary, delimiter = ' ')

        for row in reader:
             words = row.split()
             for word in words:
                 word_dict[word] = 1

# Load all the contect of csv file ONCE
load_words() 
# Now continue asking user
word = raw_input('write your word')
dict_test(word)