Python Reddit 提交文本切片

Posted

技术标签:

【中文标题】Python Reddit 提交文本切片【英文标题】:Python Reddit Submission Text Slicing 【发布时间】:2020-08-13 12:52:55 【问题描述】:

我正在使用 Reddit 的 PRAW 来收集提交内容。我希望能够对提交的文本进行切片并将其保存到一个变量中,以与硬编码的数字进行比较,以删除每个提交的帖子,其数字大于其标题。

import praw
reddit = praw.Reddit(client_id = 'REDACTED',
                    client_secret = 'REDACTED',
                    username = 'REDACTED', password = 'REDACTED',
                    user_agent = 'REDACTED')
subreddit = reddit.subreddit('NumbersReddit')
new_numpost = subreddit.new(limit=10)

for submission in new_numpost :
    if not submission.stickied:
        print(50*'-')
        print('User:  '.format(submission.author))
        print('Title: '.format(submission.title))
        print('URL: '.format(submission.url))

使用上面的代码作为起点:删除粘贴的提交后,我想获取帖子标题的前两个字符(并且始终是 2 个数字,即 24)并将其与硬编码数字,例如 18,因此它会删除所有以大于 18 的数字开头的帖子。

以下应该是输出:


用户:Example1

标题:18 年了,我之前还没有意识到这一点

网址:https://www.reddit.com/r/NumbersReddit/comments/example1


用户:Example2

标题:我尝试了 18 次,但它是值得的

网址:https://www.reddit.com/r/NumbersReddit/comments/example2


用户:Example3

标题:18 人表示节食对他们来说就足够了

网址:https://www.reddit.com/r/NumbersReddit/comments/example3


修复

改变了这个:

for submission in new_numpost :
    if not submission.stickied:
        print(50*'-')
        print('User:  '.format(submission.author))
        print('Title: '.format(submission.title))
        print('URL: '.format(submission.url))

到这里:

for submission in new_numpost :
    if not submission.stickied:
        title_number = int(submission.title[:2])
        if title_number < 25:
            print(50*'-')
            print('User:  '.format(submission.author))
            print('Title: '.format(submission.title))
            print('URL: '.format(submission.url))

【问题讨论】:

所以你只是想找到标题的前两个字符? 是的。我查找了字符串切片,但无法使用我所拥有的。如果我可以对字符串进行切片并将其保存然后进行比较,那就太好了。 【参考方案1】:

要获取任何字符串的前 n 个字符,请执行以下操作:

(假设你的标题是“18:你好!”)

my_title = '18: Hello!'
print(my_title[:2])

结果:

18

因此,对于您来说,您需要在标题行中执行以下操作: print('Title: '.format(submission.title[:2]))

假设它是一个字符串。

一旦你有了它,你可以像这样将它转换成一个整数(假设我们还没有切片它):

title = int(title[:2])

然后你可以用 int 做任何你想做的比较。

已更新以进一步澄清答案:

您的完整标题似乎来自submission.title,因此您可以做的是基于此创建两个变量: 一个名为title_number 的变量和另一个名为title 的变量,其中title_number = int(submission.title[:2])title = submission.title,您所做的就是比较title_number,如果它大于您得到的任何数字,则在for 循环中打印title,否则忽略它。

例如(假设 submit.title 是 '18 Years and I didn't realize this before')

check_int = 17
for submission in new_numpost:
    title = submission.title
    title_number = int(submission.title[:2])
    if title_number > check_int:
       print(title)

应该导致:

18 Years and I haven't realised this before

打印出来

【讨论】:

补充条约所说的,如果数据当前不是字符串,您可以使用 str() 转换数据 只需从submission.title中获取标题即可。所以title = submission.title然后随意拆分。 我仍然需要保留提交的完整标题,但过滤掉所有我不想要的。我会修改我的帖子,让你知道我的标题是什么意思。 哦,那么只需从变量title_number = int(submission.title[:2]) 的拆分名称中获取标题编号,然后您可以命名另一个变量title = submission.title 现在您拥有标题编号和标题本身。 啊,太棒了!我可以看到那里的逻辑并且它有效,不敢相信我没有看到它。非常感谢您的帮助。

以上是关于Python Reddit 提交文本切片的主要内容,如果未能解决你的问题,请参考以下文章

Python:Scrapy和Reddit

php 中的 Reddit API 返回错误的验证码以提交故事

如何在 reddit 上获取工具提示文本?

APP遭苹果下架,因名称使用甲骨文商标JavaScript

Reddit CEO亲自诠释内容审核的无奈

PRAW:回复帖子