我是python和編程的新手,一直試圖通過這個項目來教自己。當識別出一個字符串時打印一個單詞
下面的代碼運行時出錯,但它會創建一個空的.csv。
我想我可以使用words = text.split()
,但我不能用發生器做到這一點。
這是我得到的數據樣本:
Wed Dec 11 22:51:56 +0000 2013,@KBIJR please contact me via email: [email protected]!,1260080780
我只是想從我的.csv的「文本」字符串打印的電子郵件地址。
import csv
import json
import oauth2 as oauth
import urllib
import sys
import requests
import time
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
ACCESS_KEY = ""
ACCESS_SECRET = ""
class TwitterSearch:
def __init__(self,
ckey = CONSUMER_KEY,
csecret = CONSUMER_SECRET,
akey = ACCESS_KEY,
asecret = ACCESS_SECRET,
query = 'https://api.twitter.com/1.1/search/tweets.{mode}?{query}'
):
consumer = oauth.Consumer(key=ckey, secret=csecret)
access_token = oauth.Token(key=akey, secret=asecret)
self.client = oauth.Client(consumer, access_token)
self.query = query
def search(self, q, mode='json', **queryargs):
queryargs['q'] = q
query = urllib.urlencode(queryargs)
return self.client.request(self.query.format(query=query, mode=mode))
def write_csv(fname, rows, header=None, append=False, **kwargs):
filemode = 'ab' if append else 'wb'
with open(fname, filemode) as outf:
out_csv = csv.writer(outf, **kwargs)
if header:
out_csv.writerow(header)
out_csv.writerows(rows)
def main():
ts = TwitterSearch()
response, data = ts.search('@gmail.com', result_type='recent')
js = json.loads(data)
messages = ([msg['created_at'], msg['text'], msg['user']['id']] for msg in js.get('statuses', []))
search_terms = ['@gmail.com']
text = messages
matches = []
for term in search_terms:
match = [word for word in text if term in word]
matches.append(match)
write_csv('twitter_gmail.csv', messages, append=True)
if __name__ == '__main__':
main()
你確定你的字符串文字是正確的? – kviiri
首先,你不會對匹配變量做任何事 – placeybordeaux
這個邏輯肯定是令人困惑的,對於搜索術語中的每一個術語,你都會用相同的消息更新CSV,所以CSV有消息的多個副本,但沒有辦法區分爲什麼每行都存在?您也不檢查ts.search()是否工作,並且js實際上包含json數據。text是消息,它是一個永遠不會匹配的列表的列表search_terms。 –