2017-11-20 10 views
1

프로젝트 코드를 작성하고 텍스트 파일에서 각 행의 단어를 찾습니다. 내가 예제 텍스트 파일을 사용하고 단어를 검색 할 때 검색 한 단어가 들어 있어도 "No results for :"이 항상 인쇄됩니다. 사전을 틀리게 설정 했나요?파이썬 사전 검색에서 문자열이 주어진 결과를 찾지 못했습니다.

# -*- coding: utf-8 -*- 
""" 
Created on Tue Nov 14 11:31:17 2017 

@author: Ben Roux 
""" 

import re 
from collections import Counter 

stringinput = raw_input("Please enter a filename to open: ") 
dictionary = {} 

def openFile(stringinput): 
    try: 
     filevariable = open(stringinput, 'r') 
     return filevariable 
    except IOError: 
     print("Cannot Find File!") 

def readData(stringinput): 
    filevariable = open(stringinput, 'r') 
    rawline = filevariable.readline() 
    line = 1 
    while (rawline !=""): 
     pl1 = rawline.replace(",","") 
     pl2 = pl1.replace("'","") 
     pl3 = pl2.replace("!","") 
     pl4 = pl3.replace("-"," ") 
     pl5 = pl4.replace(".","") 
     pl6 = re.sub('(\\b[A-Za-z] \\b|\\b [A-Za-z]\\b)', '', pl5) 
     pl7 = pl6.lower() 
     checkdictionary = sorted(Counter(pl7.split()).items()) 
     for i in range(len(checkdictionary)): 
      if checkdictionary[i] in dictionary: 
       firstvalue = dictionary.get(checkdictionary[i]) 
       newvalue = str(firstvalue) + ", " + str(line) 
       d1 = {checkdictionary[i]: newvalue} 
       dictionary.update(d1) 
      else: 
       d2 = {checkdictionary[i]: line} 
       dictionary.update(d2) 
     rawline = filevariable.readline() 
     line+=1 

def processText(dictionary, searchkey): 
    if searchkey in dictionary: 
     print(str(searchkey) + " Appears On Lines: " + (str(dictionary[searchkey]))) 
    else: 
     print("No results for: " + str(searchkey)) 

while (True): 
    try: 
     openFile(stringinput) 
     readData(stringinput) 
     searchkey = raw_input("Enter a keyword to search for: ") 
     processText(dictionary, searchkey) 
     break 
    except IOError: 
     break 
+1

에 당신이 당신의'processText (사전, searchkey)를 실행하기 전에'을 사전의 내용을 인쇄하여 전체가 채워 졌는지 확인하십시오. – AK47

+0

{('dog', 1) : 3, ('yellow', 1) : 2, ('fox', 1) : 1 ('연', 1) : '2, 4', ('녹색', 1) : 4, ('갈색', 1) : '1, 3'} 아치 '여우'에 대한 검색 결과가 없습니다. –

+0

그럼 사전이 제대로 작성되지 않았습니다. 당신의 열쇠는 튜플입니다. '{ 'dog': 1, 'yellow': 1, ...}'또는'{ 'dog': 3, 'yellow': 2, ...}'와 같은 것이어야합니다. '('fox', 1)''1 '' 값을 반환합니다 – AK47

답변

0

다음 코드를 업데이트하십시오.

if checkdictionary[i][0] in dictionary: 
    firstvalue = dictionary.get(checkdictionary[i][0]) 
    newvalue = str(firstvalue) + ", " + str(line) 
    d1 = {checkdictionary[i][0]: newvalue} 
    dictionary.update(d1)   
else: 
    d2 = {checkdictionary[i][0]: line} 
    dictionary.update(d2) 
+0

이제 내 pl7 출력은 {0 : '1, 2, 3, 3, 4, 4'}입니다. 검색 할 때 여전히 결과가 없습니다. 여우. –

+0

이 작품, 그리고 첫 번째 대답은 정말 가까와서 나는 그 일을 너무했다. 나는 이것을 승인 할 것이다. –

1

@ 변경 AK47의 대답은 if else 문 작품이 또한 작동합니다

checkdictionary = sorted(Counter(pl7.split()).items()) 

변화

checkdictionary = pl7.split()