Как сохранить прогресс от удаления данных Reddit в файл базы данных с помощью Python - PullRequest
0 голосов
/ 06 октября 2019

Я написал скрипт для получения некоторых сообщений из reddit.

import praw
import pandas as pd
reddit = praw.Reddit(client_id='*******', \
                     client_secret='*******', \
                     user_agent='**********', \
                     username='********', \
                     password='*******8')
subreddit1 = reddit.subreddit("Tea")
subreddit2 = reddit.subreddit("Biophysics")
top_subreddit1 = subreddit1.top(limit=500)
top_subreddit2 = subreddit2.top(limit=500)
topics_dict = { "title":[],
                "score":[],
                "id":[], "url":[], 
                "comms_num": [],
                "created": [],
                "body":[]}
for submission1 in top_subreddit1:
    topics_dict["title"].append(submission1.title)
    topics_dict["score"].append(submission1.score)
    topics_dict["id"].append(submission1.id)
    topics_dict["url"].append(submission1.url)
    topics_dict["comms_num"].append(submission1.num_comments)
    topics_dict["created"].append(submission1.created)
    topics_dict["body"].append(submission1.selftext)
for submission2 in top_subreddit2:
    topics_dict["title"].append(submission2.title)
    topics_dict["score"].append(submission2.score)
    topics_dict["id"].append(submission2.id)
    topics_dict["url"].append(submission2.url)
    topics_dict["comms_num"].append(submission2.num_comments)
    topics_dict["created"].append(submission2.created)
    topics_dict["body"].append(submission2.selftext)
topics_data = pd.DataFrame(topics_dict)
topics_data

Но он отображается только в моем jupyter. Теперь я хочу сохранить прогресс в виде файла базы данных. Все советы приветствуются.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Чтобы сохранить данные локально для последующего использования на Python, вы можете использовать встроенный pickle

import pickle

def save_obj(obj, name ):
    with open(f'{name}.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

def load_obj(name):
  try:
    with open(f'{name}.pkl', 'rb') as f:
        return pickle.load(f)
    print("")
    print(f"loaded {name}")
    print("")
  except Exception as e:
    print("")
    print(f"Error loading object '{name}': {e}")
    print("")
0 голосов
/ 07 октября 2019

У вас есть несколько вариантов. Я представлю два, каждый со своими плюсами и минусами:

1. CSV

Просто сохраните ваш файл в .csv, используя DataFrame.to_csv :

topics_data.to_csv('path_to_file.csv')

Затем вы можете приступить к анализу этого CSV-файла в вашем клиенте. приложение, т. е. любое приложение, которое будет использовать ваши очищенные данные.

Плюсы

  • Простота сохранения
  • Очень скелеты;дальнейшая обработка будет простой

Минусы

  • Очень скелеты;если вам нужна какая-либо структура, у вас не будет никакой гибкости

2. SQLITE

Также можно выбрать сохранение кадра данных в sqlite, используя DataFrame.to_sql :

import sqlite3

db_file = 'my.db'
# This creates a new database file if it doesn't exist
db_conn = sqlite3.connect(db_file)
# This creates a new table 'topics_data' if it doesn't exist
topics_data.to_sql('topics_data', con=db_conn)

Плюсы

  • Может быть проще разобрать для вашего клиента
  • SQL - очень сильный язык запросов. Вы можете воспользоваться этим

Минусы

  • Может быть излишним, если все, что вам нужно, это базовая передача данных

Узнайте больше о sqliteздесь: Учебник по sqlite

...