2015-02-03 6 views
0

Мне нужна помощь с частью кода python. У меня есть функция поиска, которая будет искать строку в файле и извлекать ее, если она найдена, или дать диалоговое окно Error, если оно не найдено. Также после закрытия диалогового окна «Ошибка» дайте пользователю право ввести правильное значение. Я did't поместить весь код, но поясню/TMP/ARNE/final1 файл выглядит следующим образом:Функция поиска python не работает

siu43543, RTWAURT 
siu34544, RYAKCCD 

и если пользователь вводит имя, например siu43543, он будет reaturn RTWAURT, или дать диалог об ошибке, и ждать, пока правильно стоимость. Поэтому моя функция должна давать диалоговое окно ошибок или значение, если оно найдено.

def search(VAR,VAR1): 
    global linese 
    global linese1 
    with open("/tmp/ARNE/final1", 'r') as file: 
     for line in file: 
       var=re.search(VAR, line) 
       if var: 
        linese = line.split(',')[0] 
       else: 
        tkMessageBox.showinfo("ERROR", "MISSING ELEMENT") 
        return Exception 

       var11=re.search(VAR1, line) 
       if var1: 
        linese1 = line.split(',')[1] 
       else: 
        tkMessageBox.showinfo("ERROR", "MISSING PARENT") 
        return Exception  
    return linese 
    return linese1 

try: 
    search(line1,line1) 
except Exception: 
    break 

ответ

1

Если файл все время одинаковый, нет необходимости вводить команду открытого файла в функцию. Силы питона массивов, поэтому я хотел бы предложить прочитать весь файл в массив и чем поиск в элементах массива:

D1=[] 
D2=[] 
with open("/tmp/ARNE/final1", 'r') as file: 
    for line in file: 
     i,j=line.split(",") 
     D1.append(i) 
     D2.append(j) 
def var_search(VAR,VAR1): 
    if VAR in D1: 
     .... 
    if VAR1 in D2: 
     .... 
0

Предполагая, что остальные ваши коды будут все в порядке, то я думаю, что линии linese = line.split(',')[0] и linese1 = line.split(',')[1] делают проблему. Как вам нужно return слово после , из файла /tmp/ARNE/final1 следующее должно выполнить эту работу.

В случае var:

linese = line.split()[1] 
return linese #This will return `RTWAURT` if condition is satisfied 

Аналогично для var1:

linese1 = line.split()[1] 
return liense1 #This will return `RYAKCCD` if condition is satisfied 

Вот пример:

line = "siu43543, RTWAURT" 

Теперь, используя код, который будет split на запятой (,), и вы принимаете стоимость е в index 0 т.е. line.split(',')[0] мы имеем:

>>> line.split(',')[0] 
'siu43543' 

, который вы не хотите.

Теперь, используя то, что я использовал, который будет split по любому символу (поведение по умолчанию), и мы заинтересованы в стоимости на index 1 т.е. line.split()[1]:

>>> line.split()[1] 
'RTWAURT' 

именно то, что вы хотите return.

+0

нормально, но если пользователь дает неправильный ввод, который не находится в файле, я получаю сообщение об ошибке, это почему мне нужны некоторые проверки, чтобы проверить правильность ввода. – user3319356

+0

@ user3319356: Я решил проблему с использованием 're.search()', так как ваш вопрос заголовка специально предлагает это. Если вам нужны другие изменения, тогда вы должны задать новый вопрос с правильным заголовком и полным кодированием. – heemayl

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