2016-06-09 69 views
0

我正在制作一个reddit机器人,并且它已将它存储在数组中,因此它不会回复相同的注释两次,但是如果关闭程序数组被清除。Python将变量从文件加载到数组中

我正在寻找一种方法来保持数组,例如将其存储在外部文件中并阅读它,谢谢!

这里是我的代码:

import praw 
import time 
import random 
import pickle 

#logging into the Reddit API 
r = praw.Reddit(user_agent="Random Number machine by /u/---") 
print("Logging in...") 
r.login(---,---, disable_warning=True) 
print("Logged in.") 


wordsToMatch = ["+randomnumber","+random number","+ randomnumber","+ random number"] #Words which the bot looks for. 
cache = [] #If a comment ID is stored here, the bot will not reply back to the same post. 

def run_bot(): 
    print("Start of new loop.") 
    subreddit = r.get_subreddit(---) #Decides which sub-reddit to search for comments. 
    comments = subreddit.get_comments(limit=100) #Grabbing comments... 
    print(cache) 

    for comment in comments: 
     comment_text = comment.body.lower() #Stores the comment in a variable and lowers it. 
     isMatch = any(string in comment_text for string in wordsToMatch) #If the bot matches a comment with the wordsToMatch array. 

     if comment.id not in cache and isMatch: #If a comment is found and the ID isn't in the cache. 
      print("Comment found: {}".format(comment.id)) #Prints the following line to console, develepors see this only. 
      #comment.reply("Hey, I'm working!") 
      #cache.append(comment.id) 
while True: 
    run_bot() 
    time.sleep(5) 
+0

用'json.dumps'将列表写入文件 – Keatinge

回答

0

你在寻找什么叫serialization。您可以使用jsonyaml甚至pickle。他们都有着非常相似的API:

import json 

a = [1,2,3,4,5] 

with open("/tmp/foo.json", "w") as fd: 
    json.dump(a, fd) 

with open("/tmp/foo.json") as fd: 
    b = json.load(fd) 

assert b == a 

foo.json:

$ cat /tmp/foo.json 
[1, 2, 3, 4, 5] 

jsonyaml只有基本类型,如字符串,数字,列表和字典的工作。 Pickle具有更多的灵活性,允许您序列化更复杂的类型,如类。 json通常用于程序之间的通信,而yaml倾向于在输入需要人工编辑/读取时使用。您可能需要json。如果你想让它变得漂亮,可以选择json库来缩进输出。