gpt4 book ai didi

python - 比较 Reddit 帖子标题不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:43 27 4
gpt4 key购买 nike

我正在使用 Python 使用 PRAW 函数制作一个 redditbot。机器人本身会检查 Reddit 子版 block 中的帖子标题中是否包含特定单词,如果是,则将其交叉发布到另一个 Reddit 子版 block 。然而,一旦发生这种情况,该过程就会重复创建重复的交叉帖子,我尝试通过标题比较来抵消这种情况,以便它过滤掉已经存在的帖子。

我正在尝试比较两个单独的 reddit 提交的字符串。因此,如果两个提交的标题匹配,则不要发布,如果不匹配,则发布。

下面的代码位于另一个 for 循环中,该循环检查另一个 subreddit 的内容,该代码工作正常,下面的 for 循环给我带来了问题。

变量名称,例如realtitle 和 realtitle1 存储第一个 for 循环的提交标题的原始标题。

对错误的代码和变量命名方案表示歉意。

import praw
from PyDictionary import PyDictionary
import enchant
from twisted.internet import task, reactor

timeout = 1800.0;

def FunctionName():
reddit = praw.Reddit(senstiveredditinfohere)
subreddit = reddit.subreddit("sub1");
source = reddit.subreddit("sub2");

for submission in source.new(limit=50):
realsubmission = submission;
title = submission.title.lower();
realtitle = submission.title;
realrealtitle = realtitle + " (by X)"
title1 = submission.title + " (by X)";

for submission1 in subreddit.new(limit=200):

if submission1.title == realrealtitle:
continue;
elif submission1.title != realrealtitle:
if "string1" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";

realtitle = "";
continue;
elif "string2" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";

realtitle = "";
continue;
elif "string3" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";

realtitle = "";
continue;
elif "string4" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";

realtitle = "";
continue;
elif "string5" in title:
realsubmission.crosspost(subreddit, title=realtitle + " (by X)");
title="";

realtitle = "";
continue;
else:

break;
else:
break;


FunctionName()

l = task.LoopingCall(FunctionName)
l.start(timeout)

reactor.run()

最佳答案

我认为你的两个嵌套循环的逻辑从根本上是错误的。目前它的工作原理如下:

for x in first_iterable:
for y in second_iterable:
if x != y:
do_something(x)

尝试使用几个 range 作为您的可迭代对象,我想您会发现它没有按照您想要的方式进行。 do_something(x) 调用每次都会在 xy 值不匹配时发生,可能有很多次每个 x 的时间。

对于您的用例,您希望每个 x 仅运行一次,并且仅在它从不匹配 y 时运行。为此,您可能需要更像这样的代码:

for x in first_iterable:
if x not in second_iterable:
do_something(x)

编写 not in 测试的另一种方法是使用 all(x != y for y in secondary_iterable) (这对于比简单的不等式)。此代码将在运行 do_something(x) 之前检查 second_iterable 中的所有值,而不是在存在许多不匹配对时重复执行此操作。

用当前代码的术语来说(将多余的与标题相关的变量修剪为一个,并给它一个更好的名称):

for submission in source.new(limit=50):
crosspost_title = submission.title + " (by X)"
if all(crosspost_title != other.title for other in subreddit.new(limit=200)):
...

请注意,如果您将关键字检查(例如 "string1")移至检查帖子是否已交叉发布之前,可能会提高您的代码效率。我建议使用 any 进行该测试,而不是使用一大堆 if 测试,其中包含相同的代码(if any(keyword in title for keywords在[“string1”,“string2”,...]):)。

关于python - 比较 Reddit 帖子标题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54273867/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com