2016-11-24 8 views
0

У меня есть этот вопрос, я надеюсь, что вы могли бы мне помочь ..Python регулярного выражения найти слово

В принципе у меня есть приложение, где я открыть файл, прочитать слово из моего файла и распечатать это слово с помощью консоли. Но я хочу напечатать слово «не найдено» в случае отсутствия слова.

Вот мой питон:

import re 

file = open("example.txt","r") 
content = file.read() 
file.close() 
car = re.findall('car\s(.*?)\s',open('example.txt','r').read()) 
toy = re.findall('toy\s(.*?)\s',open('example.txt','r').read()) 
print car[0] 
print toy[0] 

вот мой текстовый файл:

автомобиль красный

игрушка зеленый

Я получаю на консоли это:

red 
green 

Работайте отлично, как вы можете видеть, но если у меня нет слова «игрушка» в моем файле. Там есть возможный способ получить что-то вроде этого с помощью консоли:

Red 
No toy found! 

Спасибо!

+5

', если игрушка: печать игрушка [0] еще: печать«не игрушка found'' –

ответ

1

Do not Открыть file в нескольких местах. Это плохая практика. Откройте в одном месте и используйте это object.

content = open('example.txt', 'r').read() 
if 'car' in content: 
    print("found") 
else: 
    print("not found") 
1
import re 

file = open("example.txt","r") 

content = file.read() 

file.close() 

car = re.findall('car\s(.*?)\s',open('example.txt','r').read()) 

toy = re.findall('toy\s(.*?)\s',open('example.txt','r').read()) 

if car == []: 
    print "No car found" 
else: 
    print car[0] 

if toy == []: 
    print "No toy found" 
else: 
    print toy[0] 
1

Вместо печати toy[0] немедленно, используйте if-else заявление, чтобы проверить, есть ли игрушка перед печатью на консоли. Если нет игрушки, напечатайте «Игрушечную игрушку».

на основе образца кода вы предоставили, решение будет выглядеть следующим образом:

import re 

file = open("example.txt","r") 
content = file.read() 
file.close() 
car = re.findall('car\s(.*?)\s',open('example.txt','r').read()) 
toy = re.findall('toy\s(.*?)\s',open('example.txt','r').read()) 
if toy: 
    print toy[0] 
else: 
    print 'No toy found' 

if car: 
    print car[0] 
else: 
    print 'No car found' 

Обратите внимание, что в то время как это решение может работать, есть некоторые улучшения, которые могут быть внесены в код в целом. Улучшения включают в себя:

  • Использование оператора Python with легко закрыть файл, который вы открыли
  • Избегайте использования переменной с именем find, как это ключевое слово в Python и может привести к неожиданному поведению позже в приложении
  • Использование данных, которые вы сохранили в переменной content для соответствия регулярному выражению (так что вам больше не нужно читать из файла).

Улучшения оставит вас с кодом, который выглядит следующим образом: импорт повторно

#use with statement to open and close file cleanly 
with open('example.txt','r') as f: 
    # save file contents in the content variable so you don't need to open the file again 
    content = f.read() 

# use data stored in content variable for your regular expression match 
car = re.findall('car\s(.*?)\s',content) 
toy = re.findall('toy\s(.*?)\s',content) 

if toy: 
    print toy[0] 
else: 
    print 'No toy found' 

if car: 
    print car[0] 
else: 
    print 'No car found' 
Смежные вопросы