2015-08-13 2 views
0

Я новичок в python. Мне нужно найти слова в списке, который содержит эти гласные, используя регулярные выражения. Следующая работа не работает. Кто-нибудь может понять, что нужно исправить? Спасибо.регулярные выражения в скрипте python

import re 
file = open('wordlist.txt', 'r') 
print re.findall('[aie]', file) 

Я получаю эту ошибку:

Traceback (most recent call last): 
    File "C:\Python27\MyScripts\script2.py", line 3, in ` <module> 
     print re.findall('[aie]', file) 
    File "C:\Python27\lib\re.py", line 181, in findall 
     return _compile(pattern, flags).findall(string) 
TypeError: expected string or buffer 

Вот что в словник, который я могу восстановить с помощью этого:

file = open('wordlist.txt', 'r') 
print file.read()` 

Печатает:

ae 
The 
Intelligent 
Assistance 
Revolution 
may 
not 
be 
televised 
but 
it 
will 
definitely 
be 
+1

Не то, чтобы я знал Python, но кажется, что findall ожидает строку, а не файл ... –

+0

Спасибо, что редактировал мой вопрос. Мне придется практиковать. Это мой первый вопрос и не мог заставить его правильно печатать. – angelica

ответ

2

re.findall() не принимает объект файла, так как ошибка говорит, что вы должны передать строку или буфера, так что вы можете использовать file.read() передать файл как объект строки в findall() функции:

print re.findall('[aie]', file.read()) 

Или как более питоновских образом, если вы имеете дело с большими файлами для отказа от чтения файла в один раз, вы можете цикл над вашим файлом и на основе y нам нужно использовать re.search или re.fildall для каждой линии.

with open('wordlist.txt') as f: 
    for line in f: 
     #do stuff with line 
+0

Большое спасибо за детали. Я потратил много времени на выяснение проблемы. Очень новый для python. благодаря! Я делаю заметки. – angelica

+0

@angelica Добро пожаловать, поэтому, если вы нашли этот ответ полезным, вы можете сообщить об этом сообществу [accepting] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/ 5235 # 5235) ответ;) – Kasramvd

+0

Я сразу же попытался принять ответ, но у меня появилось всплывающее сообщение о том, что я не могу принять ответ, пока у меня не будет репутации 15 очков! Поскольку я только начал, я не мог этого сделать. После того, как я получу 15 очков, я вернусь к этому и приму это. – angelica

1

Это должно сделать это:

import re 
file = open('wordlist.txt', 'r') 
print re.findall('[aie]', file.read()) 

Ошибка в связи с тем, вы пытаетесь реализовать на файловый объект не является содержание

+0

большое спасибо. Я потратил много времени на выяснение проблемы. Очень новый для python. благодаря! – angelica

+0

@angelica рада помочь:) \ – The6thSense

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