2013-08-29 80 views
0

我試圖創建一個簡單的文字遊戲,我需要檢查玩家寫入的單詞是否在字典中。如何檢查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

是您的CSV文件中的靜態或者這是否會動態通過一些其他進程(不是腳本中的其他更新?) 。 – Anshul

+0

Anshul的評論是相關的,因爲你應該在遊戲開始時閱讀字典,所以你只需要做一次,而不是每次調用dict_test函數。 –

+2

示例代碼中的「slowo」是什麼? – martineau

回答

0

如果CSV文件可以用一個詞來讀入名單列表中的每個元素都可以用"word" in dictionary_list來完成。我列表按字母順序排列,然後用二進制搜索更快地搜索它。該對開模塊使用二進制搜索,幷包括一個指數函數配方:

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" 

但我希望這是矯枉過正:讀字典入內存會足夠快。

0

如果你的csv文件是靜態的(除了你的主腳本正在更新它),那麼你基本上正在尋找set of words(你可以使用set - 我會舉一個例子使用字典(我不喜歡「T記得,但我認爲這是比使用集))

你可以做得更快以下

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) 
相關問題