2015-04-04 2 views
0

Я пытаюсь написать программу Python, которая предлагает пользователю ввести строку, а затем открыть текстовый файл, найти файл для точного соответствия и затем верните детали, связанные с этой строкой.(Python) Поиск точной строки в .txt и возвращаемом результате

Возвращаемая строка хранится в переменной и затем записывается в отдельный новый .txt-файл. (Я в основном создаю файл журнала, который регистрирует все мои радиолюбители).

Проблема, с которой я столкнулся, заключается в том, что она возвращает все в строке вместо точного соответствия. (Если пользователь вводит K8YP, он вернет K8YPA, K8YPB, K8YPC и т. Д. Вместо K8YP).

Вот пример того, как структурирована текстовый файл:

EN|215000|||AA0A|L|L00209566|MC CARTHY, DENNIS J|DENNIS|J|MC CARTHY|||||5022 LANSDOWNE AVE|SAINT LOUIS|MO|63109|||000|0002274249|I|||^M 
EN|215001|||AA0AA|L|L00196154|MONKS, WILLIAM S|WILLIAM|S|MONKS|||||W 529 Nebraska Hall, UN-L|Lincoln|NE|685880514||c/o Scott L. Gardner, HWML|000|0002268431|I|||^M 
EN|215002|||AA0AB|L|L00185374|CROM SR, RAYMOND L|RAYMOND|L|CROM|SR||||12291 BRIGHTON RD|HENDERSON|CO|80640|33||000|0002144756|I|||^M 
EN|215003|||AA0AC|L||PETH, ESTHER T|ESTHER|T|PETH|||||BENEDICTINE CONVENT|CLYDE|MO|64432|||000||I|||^M 
EN|215004|||AA0AD|L|L00310459|Odermann, William|William||Odermann|||||804 Second Street NW|New Prague|MN|56071|||000|0004694238|I|||^M 

Мой текущий код приведен ниже ...

#This program will log amateur radio contacts and store them in a database. 

import time 
import sys 

def main(): 
    countdown =3 
    print ("\n") 
    print "Starting in" 

    for countdown in range (3, 0, -1): 
     print countdown 
     time.sleep(0.25) 
    print ("\n")  
    #Asking user for callsign input data 
    callsign = raw_input('Please enter the callsign: ') 
    print ("\n") 

    #Asking user for frequency input data 
    frequency = raw_input('Please enter the frequency in MHz: ') 
    print ("\n") 

    #Asking user to review and confirm the entry 
    print ('Callsign: ' + callsign) 
    print('Frequency: ' + frequency) 
    print ("\n") 

    request = raw_input('Enter 1 to confirm and 0 to cancel: ') 
    print ("\n") 

    #Commands for grabbing date and time 
    date_time_stamp = time.strftime("%c") 

    if request == '1': 
     with open('EN.dat', 'r') as searchfile: 
      for line in searchfile: 
       if callsign in line: 
        text_file = open("Contact_Logs.txt", "a") 
        text_file.write("Callsign: %s\n" % callsign) 
        text_file.write("Frequency: %s\n" % frequency) 
        text_file.write("Date/Time: %s\n" % date_time_stamp) 
        text_file.write("%s\n" % line) 
        text_file.close 
        print line 
        print("The contact was logged successfully!") 
        print ("\n") 

    else: 
     print "Log request was cancelled!" 
     print ("\n") 

    return 0 

if __name__ == '__main__': 
    main() 

Любая помощь фиксируя мою проблему высоко оценили. :)

Спасибо, Andrew

ответ

0

Основываясь на приведенном примере, вы должны искать "|"+callsign+"|", чтобы избежать ложных срабатываний: if ("|"+callsign+"|") in line:. Это предполагает, что между «|» не может быть пробела, и позывной и т. д.

Подход, основанный на регулярных выражениях, будет более надежным, но потребуется больше работы.

Смежные вопросы