将Python Replace()与JSON对象一起使用

将Python Replace()与JSON对象一起使用,python,json,replace,Python,Json,Replace,因此,我有一个JSON对象,它由我正在阅读的多条Facebook消息组成。在messages对象中,我多次调用replace以删除\n并更改时间戳,如下所示 messages = ([msg['created_time'].replace('T', ' ').replace('+0000', ''), msg.get('message', 'Key "message" is not present.').replace('\n', ' ').encode('utf8'), msg['from'

因此,我有一个JSON对象,它由我正在阅读的多条Facebook消息组成。在messages对象中,我多次调用replace以删除\n并更改时间戳,如下所示

messages = ([msg['created_time'].replace('T', ' ').replace('+0000', ''), msg.get('message', 'Key "message" is not present.').replace('\n', ' ').encode('utf8'),  msg['from']['id']] for msg in js.get('data', []))
我有一个完整的单词列表,我现在真的想从消息文本中删除;但是,我不想将对象分开,因此替换似乎是一个不错的选择。我试着把所有的单词都列在这样的列表中:

 ignore = ["you","all","has","can","that", "the", "what", "with", "and", "to", "this", "would","from", "your", "which", "while", "these", "when", "way", "like", "been", "will", "look"]
rignore = re.compile('|'.join(ignore))
def ignoreall(s):
    return rignore.sub(s, '')
我不能在replace中的第一个参数中插入这样的内容,因为我需要对ignorereplace中的每个单词都有一些感觉

有人有什么建议吗?我可以使用一个缓冲区并将整个缓冲区输入到replace中吗?我有没有别的方法可以用?我是否需要为每个单词做一个替换(这似乎很草率)

谢谢你能提供的帮助

我不能在replace中的第一个参数中插入这样的内容,因为我需要对ignorereplace中的每个单词都有一些感觉

不需要,但您可以编写一个简单的函数,将一组
调用串联起来。replace
调用:

def replaceall(s, olds, replacement):
    for old in olds:
        s = s.replace(old, replacement)
    return s

使用regexp可能会更有效地实现这一点。如果在执行多个
replace
调用时存在重大性能问题,那么现在是学习regexp基础知识的好时机;如果没有,不要担心

如果您确定替换字符串中没有任何regexp特殊字符,则基本思路如下:

 ignore = ["you","all","has","can","that", "the", "what", "with", "and", "to", "this", "would","from", "your", "which", "while", "these", "when", "way", "like", "been", "will", "look"]
rignore = re.compile('|'.join(ignore))
def ignoreall(s):
    return rignore.sub(s, '')
除了在这种情况下速度更快之外,regexp还有更强大的优势。如果您以后决定只替换完整的单词(为了更好地定义“单词”),这将是一个相对容易的更改。如果要在左边界为空间时删除前面的空间,同样也不难


我可以使用一个缓冲区并将整个缓冲区输入到replace中吗

是的,但这会变得很困难,因为要替换的单词总是可以跨越一个缓冲区到下一个缓冲区的边界,这意味着它们不会出现在任何一个缓冲区中。如果所有替换字符串都有一些唯一的边界,如空格或任何非字母或其他内容,则可以分割缓冲区的最后一部分并将其保留到下一个缓冲区,然后一次执行一个缓冲区即可

这是否是一个有用的优化是你必须衡量的,或者,如果一切都足够快的话,不用担心。但它肯定不会简化事情


然而,如果你有一个“完整的东西”,它有很好的边界,你可以一次读入内存并处理所有的东西,而不是一块一块地或一个缓冲地(这可能适用于你的用例,也可能不适用于你的用例),那么它将简化事情,并可能加速它们(代价是使用更多的内存,并将任何处理延迟到“整件事情”可用,这可能比您节省的成本更高,也可能不比您节省的成本更高)。

您不愿意解析JSON并在消息的需要部分安全地执行替换吗?因此,类似“你们都来参加聚会了吗?”将被输入到这个替换方法,它将返回“即将到来的聚会”?Paulo与当前的方法一样,我们只使用write_csv('fb_file.csv',messages,append=True)为了输出整个对象。我们试图避免分解它来解析它,因为拉操作将运行一段时间,这对于对象中的数据量来说要快得多。杰森:差不多。这不是最后的列表,它肯定会变长。然而,关键是要去掉所有我们不需要存储的单词。我们只需要有助于我们分析的文字。@Babs:您正在编写一个单行CSV文件,其中包含您所有的消息作为列?这似乎是一种奇怪的数据格式。谢谢!我将尝试一下您的想法,看看我能从中得到什么。=)