2015-08-17 4 views
-1

Работает на файл csv. Он содержит список источников (простые ссылки ssl), места, сайты (< a> not ssl links </a>), Direcciones и электронные письма. Когда некоторые данные недоступны, он просто не появляется. Примерно так:Python for re.match re.sub

httpsgoogledotcom, GooglePlace2, Direcciones, Montain View, Email, [email protected] 

Тем не менее ссылки веб-сайта «html tag» всегда появляются дважды и сопровождаются несколькими запятыми. Точно так же следуют запятые, иногда Direcciones, а иногда и источники (https). Таким образом, если процесс не прерывается, когда EOF, он может «заменять» на несколько часов и создавать выходной файл с gbs redudant и размещенной на месте информацией. Давайте забрать четыре записи в качестве примера Reutput.csv:

> httpsgoogledotcom, GooglePlace, Website, "<a> href='httpgoogledotcom'></a>",,,,,,,,,,,,,, 
> "<a href='httpgoogledotcom'></a>",,,,,,,,,,,,, 
> ,,Direcciones, Montain View, Email, [email protected] 
> httpsbingdotcom, BingPlace, Direcciones, MicroWorld, Email, [email protected] 
> httpsgoogledotcom, GooglePlace, Website, "<a> href='httpgoogledotcom'></a>",,,,,,,,,,,,,, 
> "<a href='httpgoogledotcom'></a>",,,,,,,,,,,,, 
> httpsbingdotcom, BingPlace, Direcciones, MicroWorld, Email, [email protected] 

Таким образом, идея является удаление ненужных веб-сайта «в теге HTML» ссылку и избыток запятых, но уважая новые линии/п и не падает на петле. Как это:

> httpsgoogledotcom, GooglePlace, Website, "<a href='httpgoogledotcom'></a>",Direcciones, Montain View, Email, [email protected] 
> httpsbingdotcom, BingPlace, Direcciones,MicroWorld, Email, [email protected] 
> httpsgoogledotcom, GooglePlace,Website, <a href='httpgoogledotcom'></a>" 
> httpsbingdotcom, BingPlace, Direcciones, MicroWorld, Email, [email protected] 

Это последняя версия коды:

with open('Reutput.csv') as reuf, open('Put.csv', 'w') as putuf: 
    text = str(reuf.read()) 
    for lines in text: 
     d = re.match('</a>".*D?',text,re.DOTALL) 
     if d is not None: 
      if not 'https' in d: 
       replace = re.sub(d,'</a>",Direc',lines) 
     h = re.match('</a>".*?http',text,re.DOTALL|re.MULTILINE) 
     if h is not None: 
      if not 'Direc' in h: 
       replace = re.sub(h,'</a>"\nhttp',lines) 
     replace = str(replace) 
     putuf.write(replace) 

Теперь я получаю Put.csv файл с последней строкой неоднократной навсегда. Почему этот цикл? Я уже пробовал несколько подходов к этому коду, но, к сожалению, я все еще придерживаюсь этого. Заранее спасибо.

ответ

0

Наконец-то я получил код сам. Я размещаю его здесь, надеясь, что кто-то сочтет это полезным. Спасибо вам за помощь и отрицательные голоса!

import re 
with open('Reutput.csv') as reuf, open('Put.csv', 'w') as putuf: 
    text = str(reuf.read()) 
    d = re.findall('</a>".*?Direc',text,re.DOTALL|re.MULTILINE) 
    if d is not None: 
     for elements in d: 
      elements = str(elements) 
      if not 'https' in elements: 
        s = re.compile('</a>".*?Direc',re.DOTALL) 
        replace = re.sub(s,'</a>",Direc',text) 
    h = re.findall('</a>".*?https',text,re.DOTALL|re.MULTILINE) 
    if h is not None: 
     for elements in h: 
      if not 'Direc' in elements: 
       s = re.compile('</a>".*?https',re.DOTALL) 
       replace = re.sub(s,'</a>"\nhttps',text) 
     replace = str(replace) 
     putuf.write(replace) 
0

Если нет совпадения, groups будет None. Вам нужно защититься от этого (или реорганизовать регулярное выражение так, чтобы оно всегда соответствовало чему-то).

groups = re.search('</a>".*?Direc',lines,re.DOTALL) 
    if groups is not None: 
     if not 'https' in groups: 

Обратите внимание на добавление состояния not None и последующее вдавливание следующих строк, которые он регулирует.

+0

Я попытался добавить еще: \t заменить = линию, но Нету – Abueesp

+0

См обновление с примером кодом – tripleee

+0

я попробовал, и я получил пустой файл, так что вы правы, матч групп не должен быть ни один. Зачем? И как исправить Reutput.csv? Спасибо заранее tripleee – Abueesp

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