簡體   English   中英

Python API Streaming,在特定大小后寫入新文件

[英]Python API Streaming, write new file after certain size

我有一個python腳本,維護與Twitter Streaming API的開放連接,並將數據寫入json文件。 在寫入當前文件達到一定大小后,是否可以在不中斷連接的情況下寫入新文件? 例如,我只是將數據流式傳輸超過1周,但所有數據都包含在一個文件中(~2gb),因此解析起來很慢。 如果我可以寫入一個新文件,比如500mb,那么我將有4個較小的文件(例如dump1.json,dump2.json等)來解析而不是一個大文件。

import tweepy
from tweepy import OAuthHandler
from tweepy import Stream
from tweepy.streaming import StreamListener

# Add consumer/access tokens for Twitter API
consumer_key = '-----'
consumer_secret = '-----'
access_token = '-----'
access_secret = '-----'

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)

# Define streamlistener class to open a connection to Twitter and begin consuming data
class MyListener(StreamListener):
def on_data(self, data):
    try:
        with open('G:\xxxx\Raw_tweets.json', 'a') as f:
            f.write(data)
            return True
    except BaseException as e:
        print("Error on_data: %s" % str(e))
        return True
def on_error(self, status):
   print(status)
   return True

bounding_box = [-77.2157,38.2036,-76.5215,39.3365]#filtering by location
keyword_list = ['']#filtering by keyword

twitter_stream = Stream(auth, MyListener())
twitter_stream.filter(locations=bounding_box) # Filter Tweets in stream by location bounding box
#twitter_stream.filter(track=keyword_list) # Filter Tweets in stream by keyword

由於每次都重新打開文件,因此非常簡單 - 在文件名中使用索引並在文件大小達到閾值時將其推進

class MyListener(StreamListener):
    def __init(self):
        self._file_index = 0

    def on_data(self, data):
        tweets_file = 'G:\xxxx\Raw_tweets{}.json'.format(self._file_index)
        while os.path.exists(tweets_file) and os.stat(tweet_file).st_size > 2**10:
            self._file_index += 1 
            tweets_file = 'G:\xxxx\Raw_tweets{}.json'.format(self._file_index)
....

該周期將負責重啟您的應用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM