【问题标题】:Pass Content To Function of Another Module in Python将内容传递给 Python 中另一个模块的函数
【发布时间】:2015-03-21 10:19:24
【问题描述】:

我正在使用 SAX 解析器。我正在尝试发送使用以下代码检索到的“内容”:

检查 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

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

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

来源会是这样的:

“哦!那是 1000 多万美元”

预期:哦,有 1000 多个

【问题讨论】:

    标签: python memory arguments argument-passing saxparser


    【解决方案1】:

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

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

    【讨论】:

    • 看起来在缩进被取消缩进之后,它似乎工作了。但是我的输出还是不好..返回的输出数据很清楚。句子完全消失了,我在这里和那里看到一些字母......
    【解决方案2】:

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

    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
    

    【讨论】:

    • 实际上 remArticles = {'!': '', '$': ''} 是一个样本。我有很多钥匙,而且非常大。我给出一个示例要点:remArticles = {' a ':'', ' the ':'', ' and ':'', ' an ':'', '& nbsp;':'', 'imagesize' :'', 'image_seal':'', 'image_caption':'', 'svg|mapsize':'', ']]':'', ']] ':'', '[[':'' , ' [[ ':'', 'ca':'', 'io':'', 'ht':'', 'ht':'', 'nl':'', 'pl':'' , 'pt':'', 'vo':'', '{':'', '[':'', '*':'', '|':'',} 我根据你的修改建议,它在一定程度上起作用。意思是,一些字母被替换了,但不是 }} 或 ]] 或 |等等。
    • 这是您的完整 remArticles 吗?您的字典中也有重复的键
    • 我还对照]} etc.检查了代码。它工作正常,正如我已经说过的" ! "不等于"!"
    • 等一下,在您最近更新了关于迭代每个字符而不是每一行的更新之后,这可行,但需要很多时间..您是否使用任何工具来计算性能?
    【解决方案3】:

    这个怎么样:

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-08
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多