将内容传递给 Python 中另一个模块的函数

Pass Content To Function of Another Module in Python

我正在使用 SAX 解析器。我正在尝试发送使用以下代码检索到的 'content':

检查 startElement 和 endElement 后,我​​有以下代码:

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

这个 format.formatter 应该读取我作为 'content' 发送的数据,以进行任何处理,例如删除垃圾字符等和 return 它。我通过使用 string.replace 函数来做到这一点:

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

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

但是输出没有按预期出现。

如果有人能在这方面提供帮助,那就太好了。

source 会是这样的:

"Oh! That's lots and 1000s of $$$$"

预期:哦,很多 1000s

你的 return line 过度对齐,假设你的 Q 显示的是你的实际代码,所以你在第一次替换后结束。将 return 缩进 4 个空格,因此它与 for 关键字对齐,而不是与 for 循环的主体对齐。

已添加:{' ! ':'', ' $ ':''} 仅匹配前后有空格的感叹号和美元符号。但是随后 OP 说示例输入是 "Oh! That's lots and 1000s of $$$$" - 在这些标点符号前后没有 个空格,因此不会替换任何内容。

您正在遍历每个字符而不是每一行:

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

这个怎么样:

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