簡體   English   中英

Python Praw如何存儲數據以便以后調用?

[英]Python Praw ways to store data for calling later?

字典是這樣做的正確方法嗎? 理想情況下,深度應大於5+。 抱歉,我僅有的語言經驗是powershell,在那里我只會創建一個對象數組。 我不是要找人寫代碼,我只是想知道是否有更好的方法?

謝謝科迪

我的Powershell方式:

[$title1,$title2,$title3]

$titleX.comment = "comment here"
$titleX.comment.author = "bob"
$titleX.comment.author.karma = "200"
$titleX.comment.reply = "Hey Bob love your comment." 
$titleX.comment.reply.author = "Alex"
$titleX.comment.reply.reply = "I disagree"

Python代碼損壞:

import praw


d = {}



reddit = praw.Reddit(client_id='XXXX',
                     client_secret='XXXX',
                     user_agent='android:com.example.myredditapp:'
                     'v1.2.3 (by /u/XXX)')

for submission in reddit.subreddit('redditdev').hot(limit=2):
     d[submission.id] = {}
     d[submission.id]['comment'] = {}
     d[submission.id]['title']= {}
     d[submission.id]['comment']['author']={}
     d[submission.id]['title'] = submission.title
     mySubmission = reddit.submission(id=submission.id)
     mySubmission.comments.replace_more(limit=0)
     for comment in mySubmission.comments.list():
        d[submission.id]['comment'] = comment.body
        d[submission.id]['comment']['author'] = comment.author.name

print(submission.title)
print(comment.body)
print(comment.author.name)
print(d)

  File "C:/git/tensorflow/Reddit/pull.py", line 23, in <module>
    d[submission.id]['comment']['author'] = comment.author.name

TypeError: 'str' object does not support item assignment

{'6xg24v': {'comment': 'Locking this version.  Please comment on the [original post](https://www.reddit.com/r/changelog/comments/6xfyfg/an_update_on_the_state_of_the_redditreddit_and/)!', 'title': 'An update on the state of the reddit/reddit and reddit/reddit-mobile repositories'}}

我認為您使用字典的方法還可以,但是您也可以通過為帖子使用數據結構來解決此問題:

d[submission.id] = {}
d[submission.id]['comment'] = {}
d[submission.id]['title']= {}
d[submission.id]['comment']['author']={}
d[submission.id]['title'] = submission.title

您可以這樣創建一個Submission類:

class Submission(object):
    def __init__(self, id, author, title, content):
        self.id = id
        self.author = author
        self.title = title
        self.content = content
        self.subSubmissions = {}

    def addSubSubmission(self,submission):
        self.subSubmission[submission,id] = submission
    def getSubSubmission(self,id):
        return self.subSubmission[id]

通過使用您可以將代碼更改為此

submissions = {}
for sm in reddit.subreddit('redditdev').hot(limit=2):
    submissions[sm.id] = Submission(sm.id, sm.author, sm.title, sm.content)

    # I am not quite sure what these lines are supposed to do, so you might be able to improve these, too
    mySubmission = reddit.submission(id=sm.id)
    mySubmission.comments.replace_more(limit=0)
    for cmt in mySubmission.comments.list():
        submissions[sm.id].addSubSubmission(Submission(cmt.id, cmt.title, cmt.author, cmt.body))

通過使用此方法,您還可以導出代碼以將注釋/子提交讀出到一個額外的函數中,該函數可以遞歸調用自身,以便您可以讀取注釋的深度。

暫無
暫無

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

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