Json对象的函数帮助

时间:2014-01-22 02:05:59

标签: python json function

我是python和编程的新手。我写了这个原始脚本来处理开放图表中的一些Facebook数据。

它有效并且确实产生了我想要的.csv。

def main():
    ts = FacebookSearch()
    data = ts.search('appliance')
    js = json.loads(data)

    messages = ([msg['created_time'], msg.get('message', 'Key "message" is not present.').replace('\n', '').replace(',', '').encode('utf8'),  msg['from']['id']] for msg in js.get('data', []))

    write_csv('fb_washerdryer.csv', messages, append=True)

上述代码存在问题:

1。)看起来很长很可怕 2.)我想将'message'的总大小缩短为900 varchar

为了实现上述目的,我将消息分解为其自己的函数:

def main():
    ts = FacebookSearch()
    data = ts.search('appliance')
    js = json.loads(data)

def extract_info(msg):
    created_time = msg['created_time']
    message = msg.get('message', 'Key "message" is not present.').replace('\n', '').replace(',', '').encode('utf8')
    user_id = msg['from']['id']
    return (created_time, message, user_id)

    messages = (extract_info(msg) for msg in js.get('data', []))


    write_csv('fb_washerdryer.csv', messages, append=True)

我运行这个新代码时没有出错,但我也没有打印任何东西。

对于我没做错的任何想法,不打印。由于我没有错误,我很少被卡住而没有完成我的第二个缩短'消息'字符串的任务

1 个答案:

答案 0 :(得分:1)

看起来像是缩进问题。第二个示例的最后两行位于extract_info内,而不是main。尝试:

def main():
    ts = FacebookSearch()
    data = ts.search('appliance')
    js = json.loads(data)

    def extract_info(msg):
        created_time = msg['created_time']
        message = msg.get('message', 'Key "message" is not present.').replace('\n', '').replace(',', '').encode('utf8')
        user_id = msg['from']['id']
        return (created_time, message, user_id)

    messages = (extract_info(msg) for msg in js.get('data', []))


    write_csv('fb_washerdryer.csv', messages, append=True)

或者,为了防止嵌套函数的混淆:

def extract_info(msg):
    created_time = msg['created_time']
    message = msg.get('message', 'Key "message" is not present.').replace('\n', '').replace(',', '').encode('utf8')
    user_id = msg['from']['id']
    return (created_time, message, user_id)

def main():
    ts = FacebookSearch()
    data = ts.search('appliance')
    js = json.loads(data)
    messages = (extract_info(msg) for msg in js.get('data', []))
    write_csv('fb_washerdryer.csv', messages, append=True)