我是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)
我运行这个新代码时没有出错,但我也没有打印任何东西。
对于我没做错的任何想法,不打印。由于我没有错误,我很少被卡住而没有完成我的第二个缩短'消息'字符串的任务
答案 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)