我参加了Coursera的数据科学课程,并完成了其中一项任务,这使我编写了这段代码。
import sys
import json
import re
def lines(fp):
print str(len(fp.readlines()))
def main():
tweet_file = open(sys.argv[1])
word_frequency_count = {}
for line in tweet_file:
raw_data = json.loads(line)
#print raw_data
text = raw_data.get('text', "").lower().encode('utf-8')
new_text=re.findall(r"[\w']+", text)
print new_text
#print text
for word in new_text:
word_frequency_count[word] = 'Test'
print word_frequency_count.items()
if __name__ == '__main__':
main()
new_text的print语句输出这些行,并且有数千个这样的结果只是给这个样本。
['rt', 'fuadagus2', 'presiden', 'sby', 'belilah', 'nuklir', 'kpd', 'korut', 'luncurkan', 'ke', 'israel', 'tunjukan', 'kalau', 'kamu', 'islam', 'prayforgaza']
['not', 'letting', 'nothing', 'else', 'get', 'in', 'my', 'way']
困扰我的是字典键值对的最后一次打印,它只输出5个键值对。我是一名Java开发人员,这是我第一次涉足python,我错过了这里显而易见的事情吗?
答案 0 :(得分:1)
第二个for循环
for word in new_text
位于主循环之外(循环遍历文件中的行)。这意味着它只会在主循环结束后执行一次。此时,new_text将只包含最后一行的单词。
尝试在主循环中移动第二个循环..
答案 1 :(得分:1)
你的缩进是错误的:
for line in tweet_file:
...
for word in new_text:
word_frequency_count[word] = 'Test'
第二个循环在外部第一个循环发生,因此只处理new_text
中{0}}的line
列表。它应该是:
tweet_file
然而,请注意Python附带“包含电池”;在这种情况下,collections.Counter
会让您的生活更轻松。