2016-06-22 3 views
-1

У меня есть текстовый файл, и я читал, что с помощью Python. Он начинается с веб-адреса и предоставляет другую информацию, начиная с (y) или (n). Между строками может быть несколько пустых строк. Например, текстовый файл может быть таким,Как использовать регулярное выражение для удаления некоторой информации в python?

http://usatoday30.usatoday.com/money/industries/energy/2005-12-28-enron-participants_x.htm 

(y) Lay, Kenneth 
(y) Skilling, Jeffrey 
(n) Howard, Kevin 
(n) Krautz, Michael 

Я бы хотел, чтобы имена начинались с (y) и возвращались как список. Скажем, в этом случае список возврата будет так,

result = ["Lay, Kenneth", "Skilling, Jeffrey"] 

Я прочитал данные следующим образом,

poi_names_data = open("../final_project/poi_names.txt", "r") 

for row in poi_names_data: 
    print row, "\n" 

Как извлечь правильные данные из строки?

+2

'если row.startswith («(у)»): печать row' - считать, что для начала, а затем попытаться решить ее самостоятельно. – poke

+2

Или ['if row.startswith (" (y) "): print (строка [4:])'] (https://ideone.com/dPb3EB). Вам нужно как-то связать строки '(y)' с адресом, по которому они появляются? –

+0

Какой смысл голосования, когда у меня есть 2 ответа и почти никаких других возражений по этому вопросу? – Arefe

ответ

1

Как указывается в комментариях, вы можете использовать startswith решить, если вы собираетесь обработать строку и использовать re.sub для удаления (y), ведущие пробелы и разрывы строк \n, после того, что он должен дать вам ожидаемый результат:

import re 
result = [] 
with open("test.txt") as text: 
    for row in text: 
     if row.startswith("(y)"): 
      result.append(re.sub(r"\(y\)\s+|\n", "", row)) 

result 

# ['Lay, Kenneth', 'Skilling, Jeffrey'] 
+0

Вы пытаетесь удалить символ новой строки из строки с символом 're.sub' и' r "\ (y \) \ s + \ \ n" ". –

+0

@ WiktorStribiżew Каждая строка содержит новый символ строки? – Psidom

+1

Хорошо, есть две возможные альтернативы: 1) http://stackoverflow.com/questions/20350305/python-read-crlf-text-file-as-is-with-crlf, 2) 'strip'. Кроме того, почему бы не использовать 'res.append()'? –

1

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

import io 
import re 

result = [] 
rx = re.compile(r'(?<=\(y\)).*', re.MULTILINE) 

with open('data.txt','r+') as f: 
    for line in f: 
     match = rx.search(line) 
     if match: 
      result.append(match.group(0).strip()) 

print(result) 

Я получу следующий результат из ваших данных образца. (Предполагается, что данные хранятся в файле test.txt)

['Lay, Kenneth', 'Skilling, Jeffrey'] 
+0

Спасибо за ответ. Кто-то преднамеренно отказался от этого законного вопроса, не указав никаких веских причин. Можете ли вы мне помочь? – Arefe

+1

Я не голосовал, но я думаю, что кто-то думал, что этот вопрос очень прост, и вы не проявили своих усилий, чтобы решить его, кроме как спросить, какое решение вы хотите. – Saleem

+0

Я новичок в Python и не знаю достаточно регулярного выражения для его решения. Конечно, можно использовать, не используя регулярное выражение. – Arefe

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