我很漂亮的noob,並且使用一些借用的python代碼實現了一個非常簡單的用tweepy拉動的推文的JSON解析。我試圖解決自己,但似乎創造更多的問題。在解析JSON時徹底修復KeyError NoneType
只是.txt文件中的幾行導致問題。在一方面,該文件包含此週期性:
{"limit":{"track":3,"timestamp_ms":"1487481419833"}}
在另一方面,對於一些鳴叫鳴叫領域都在那裏,但似乎無法在JSON格式(例如崇高不能識別語法這樣)。
結果是下面的代碼給了我一個KeyError異常「文本」
tweets['text'] = map(lambda tweet: tweet['text'], tweets_data)
所以我修復,改成:
tweets['text'] = map(lambda tweet: tweet.get('text', None), tweets_data)
不過,現在我在後面得到一個不同的錯誤我的代碼時使用:
def word_in_text(word, text):
word = word.lower()
text = text.lower()
match = re.search(word, text)
if match:
return True
return False
我得到的錯誤:
AttributeError: 'NoneType' object has no attribute 'lower'
我覺得必須有一個更清潔,更簡單的解決方案。有什麼建議麼?下面是完整的代碼(減去我正在打印的一些圖表,以及我在dataFrame中創建的更多列)。
非常感謝,如果我沒有得到適當的發佈禮儀,我表示歉意。
import json
import pandas as pd
import matplotlib.pyplot as plt
import re
tweets_data_path = '[...trump_tweets.txt]'
tweets_data = []
tweets_file = open(tweets_data_path, "r")
for line in tweets_file:
try:
tweet = json.loads(line)
tweets_data.append(tweet)
except:
continue
print "Number of tweets included is " + str(len(tweets_data))
tweets = pd.DataFrame()
tweets['text'] = map(lambda tweet: tweet.get('text', None), tweets_data)
tweets['lang'] = map(lambda tweet: tweet.get('lang', None), tweets_data)
tweets['country'] = map(lambda tweet: tweet.get('place', None), tweets_data)
def word_in_text(word, text):
word = word.lower()
text = text.lower()
match = re.search(word, text)
if match:
return True
return False
search_term_1 = 'America'
search_term_2 = 'POTUS'
search_term_3 = 'ban'
tweets[search_term_1] = tweets['text'].apply(lambda tweet: word_in_text(search_term_1, tweet))
tweets[search_term_2] = tweets['text'].apply(lambda tweet: word_in_text(search_term_2, tweet))
tweets[search_term_3] = tweets['text'].apply(lambda tweet: word_in_text(search_term_3, tweet))
print "tweets mentioning search_term_1: " + str(tweets[search_term_1].value_counts()[True])
print "tweets mentioning search_term_2: " + str(tweets[search_term_2].value_counts()[True])
print "tweets mentioning search_term_3: " + str(tweets[search_term_3].value_counts()[True])
可能其中一條推文沒有文字?你有沒有嘗試打印推文並查看叛逆的推文? –
@omri_saadon是的,事實上我可以看到問題 - 這正是我試圖在上面解釋的。 .txt文件中偶爾會有一個「限制」標記,而其他推文不會以正確的語法出現(對於那些我猜測字段丟失或其他內容的人)。 – Kees
在這種情況下,我想你會得到rateLimitException,這是真的嗎?你想完成什麼?爲了避免錯誤或不重複畸形的微博? –