Как мне создать файл, который не содержит информацию старше 5 минут? - PullRequest
0 голосов
/ 26 января 2019

Я работаю над Twitter Streaming api для получения данных твитов в реальном времени.

Я могу распечатать эти данные на консоли.Но я хочу сохранить данные в файл, и эти данные должны быть не старше 5 минут.

Как непрерывно просматривать файл, содержащий данные за последние 5 минут, как мы можем сделать для файлов журнала.

В то же время файл должен быть доступен для чтения.

Есть ли способ сделать это в Python?

Я не сталкивался с такой вещью, когда мы можем упомянуть такую ​​продолжительность, в течение которой файл может содержать конкретные данные.

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Это должно помочь вам начать.Он убивает твит из списка всякий раз, когда его возраст превышает 300 секунд.

import time;
TIME_LIMIT = 300; # 5 mins in seconds


# Get the tweet text and the time stamp
def GetTweet():
    #...
    # Wait until there is a new tweet from Donald :)
    text = 'your function that gets the text goes here';

    # Get the time stamp
    time_ = time.time();
    return text, time_


# Kill all the old data that is older than X seconds
def KillOldTweet(tweets):
    time_now = time.time();  # Capture the current time

    # For every tweet stored remove the old one
    for i, tweet in enumerate(tweets):
        time_diff = time_now - tweet[1]; # get the time difference
        if time_diff > TIME_LIMIT: # if older than X secods, kill that tweet from the list
            tweets.pop(i);
            pass;      
        pass;

    return tweets; # return the list

# Updates the file with the list of text of tweets
def UpdateFile(tweets):
    with open('output.txt', 'w') as file:  # open the file and close it after writing
        texts = [ i for i, j in tweets ]; # unzip;
        out_text = str(texts); # convert to string
        print(out_text); #
        file.write(out_text); # overwrite to file
        pass;
    pass;


tweets = [];
while(1):
    # Get the new tweet and append to the list
    text, time_ = GetTweet(); # Wait until a new tweet arrived
    tweet = (text, time_); # zip it into a tuple
    tweets.append(tweet); # append it to list


    # Kill the old tweets from the list
    tweets = KillOldTweet(tweets)

    # Update the file with the fresh tweets
    UpdateFile(tweets);

    # Sleep for 1 second.
    time.sleep(1);

    pass;

Но я бы порекомендовал вам использовать модуль сокета вместо записи в текстовый файл.Или используйте модуль pickle, чтобы легко распаковать вещи из файла

0 голосов
/ 26 января 2019

Поиск "python logrotate" находит это: https://docs.python.org/3.7/library/logging.handlers.html#logging.handlers.TimedRotatingFileHandler. Вероятно, стоит попробовать.

Если вы предпочитаете что-то кодировать самостоятельно, управляя твитами в памяти (например, с помощью collections.deque, чтобы можно было легко вставлять старые и добавлять новые), то время от времени сбрасывайте это в файл ... , (или используйте сокеты, pickle, просто имя переменной, чтобы передать эти данные в функцию анализа, как уже упоминалось в других ответах).

0 голосов
/ 26 января 2019

Сохраните данные в файле с актуальным временем и проверьте, отличается ли фактическое время от 5 минут.Используйте время.Или используйте функцию сна и стирайте старые данные каждые 5 минут.

...