2015-01-22 1 views
1

Я использую SAX Parser. Я пытаюсь отправить «содержание» Я извлеченный с помощью ниже кода:Передача содержимого функции другого модуля в Python

После проверки StartElement и EndElement, у меня есть следующий код:

def characters(self, content): 
    text = format.formatter(content) 

это format.formatter, как ожидается, читать эти данные, которые Я отправил «контент» для любой обработки, например, удаление ненужных символов и т. Д. И вернуть его. Я делаю это, используя функцию string.replace:

remArticles = {' ! ':'', ' $ ':''} 

    for line in content: 
     for i in remArticles: 
      line= line.replace(i, remArticles[i]) 
     #FormattedFileForIndexing.write(line) 
      return line 

Однако выход не подходит, как ожидалось.

Будет здорово, если кто-то может помочь в этом.

источника будет нечто вроде:

«! О, это много и 1000s из $$$$»

Ожидаемый: О, это много 1000s

ответ

1

Вы итерация каждого символа не каждая строка:

def characters(content): 
    remArticles = {'!': '', '$': ''} # remove spaces from " ! " 
    for i in remArticles: 
     content = content.replace(i, remArticles[i]) 
    return content 

Вы также пытаетесь соответствовать ! и $ с пробелами вокруг них, которые в соответствии с вашим ожидаемым выходом является неправильным.

In [6]: content = "Oh! That's lots and 1000s of $$$$" 

In [7]: characters(content) 
Out[7]: "Oh That's lots and 1000s of " 

Только с помощью замены является наиболее эффективным вариантом:

In [20]: timeit characters(content) 
1000000 loops, best of 3: 746 ns per loop 

In [21]: timeit format_this(content) 
100000 loops, best of 3: 2.57 µs per loop 
+0

Фактически remArticles = {'!': '', '$': ''} Был образцом. У меня много ключей в этом, и это довольно огромно. Я даю пример: remArticles = {'a': '', 'the': '', 'and': '', 'an': '', '& nbsp;': '', ' imageize ':' ',' image_seal ':' ',' image_caption ':' ',' svg | mapsize ':' ',']] ':' ',']] ':' ',' [[': '', '[[': '', 'ca': '', 'io': '', 'ht': '', 'ht': '', 'nl': '', 'pl' : '', 'pt': '', 'vo': '', '{': '', '[': '', '*': '', '|': '',} I внесенные изменения в соответствии с вашим предложением, оно работает в определенной степени. Смысл, некоторые алфавиты заменяются, но не}} или]] или | и т. д. – Rakanid

+0

- то, что ваши полные remArticles? У вас также есть повторяющиеся ключи в вашем dict –

+0

Я также проверил код против ']}' и т. Д.и он отлично работает, как я уже сказал, '!!' 'не равен' "!" ' –

0

Вашего return line чрезмерно выровнен, предполагая, что ваш Q показывает ваш фактический код, поэтому вы заканчиваете его после первой замены. De-indent, что return на 4 пробела, поэтому он выравнивается с ключевым словом for, а не с телом цикла for.

Добавлено: {' ! ':'', ' $ ':''} соответствует восклицательным знакам и знакам доллара, только если у них есть пробелы до и после них. Но тогда OP говорит, что ввод образца составляет "Oh! That's lots and 1000s of $$$$" - no пробелов до и после этих знаков препинания, поэтому ничего не будет заменено.

+0

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

0

Как об этом:

def format_this(content): 
    bad_keys = {'!', '$'} 
    return "".join([element for element in content if element not in bad_keys]) 

if __name__ == '__main__': 
    content = "Oh! That's lots and 1000s of $$$$" 
    formatted_content = format_this(content) 
    print formatted_content 

>>> Oh That's lots and 1000s of 
Смежные вопросы