在 Python 3 中比较字符串

Posted

技术标签:

【中文标题】在 Python 3 中比较字符串【英文标题】:Comparing Strings in Python 3 【发布时间】:2012-06-14 06:47:31 【问题描述】:

我正在编写这个 Python 小程序,它将在 www.fmylife.com 网站上获得新帖子,我希望这个程序打印这些新帖子。即使我刚刚开始,这也是一项简单的任务,但由于某种原因,我无法让代码停止打印同一篇文章。

import urllib.request,time

def getFml():
    rawfml = urllib.request.urlopen("http://www.fmylife.com")
    refml = rawfml.read()
    fml = refml.decode("utf8")
    rawfml.close()
    return fml
def parseFml(fml):
    fml=fml.split('Today,')
    fml=fml[1]
    for char in fml:
        if char in '0123456789<>/="#()-;:"\',':
            fml=fml.replace(char,'')
    fml=fml.split('FMLapdiv')
    fml=fml[0]
    fml=fml.split('aa')
    fml=''.join(fml)
    return fml
    listy=   ['date','left_parta','votej','idvotea','onclickvote','jTipa','comments','right_partp','fmllink','clear','post','hrefwork','class','dyn','javascript','div','clas-s-right_partp','hrefmiscellaneous','classdyncomments''div','article','idpa','classclear','classpost','hreflove','classfmlling','FMLap','classdate','classleft_parta','id_','nameresume','classjTipa','span','classdyn-commentsspan','clas-s-right_partpspan','classdyn-vote-j','idcotea','hrefjavascript;:','classfmllink','href']
for x in range(len(listy)):
    fml=fml.replace(listy[x],'')
    return fml
oldfml=''
count=0
while True:
    fml=getFml()
    fml=parseFml(fml)
    count=count+1
    if count>1:
        oldfml=fml

    if oldfml == fml:
        time.sleep(300)
    else:
        print('Today,'+fml)
        time.sleep(300)

我的预期输出是获取帖子(我做到了)并打印它。这很好用。唯一的问题是我只希望它打印一次帖子,当它定期在网站上检查时,它会打印多次,我不知道为什么。 提前感谢大家!

【问题讨论】:

您的预期输出是什么?你得到了什么?另外,请使用实际的解析器来解析 html,拆分字符串充其量是脆弱的。您也没有从 parseFml() 返回任何内容,只是快速浏览一下。 【参考方案1】:

在这部分代码中:

while True:
    fml=getFml()
    fml=parseFml(fml)
    count=count+1
    if count>1:
        oldfml=fml
    if oldfml == fml:
        ...

您分配oldfml=fml 您检查他们的平等。因此,它们总是相等。

我建议进行以下修复:

while True:
    if count>1:
        oldfml=fml
    count=count+1
    fml=getFml()
    fml=parseFml(fml)
    if oldfml == fml:
        ...

这样一来,oldfml 实际上就会老了。

【讨论】:

我明白你在说什么,但由于某种原因它仍然不断重复。感谢您的努力。 @Tazzer:你确定网站实际上并没有改变吗?如果它们不同,它应该被打印出来,对吧?另外,请修复代码的缩进,现在很难看到 parseFml 实际做了什么。 非常感谢您的建议,我改变了您告诉我的内容,它仍然打印了两次,但后来我注意到 'if count>1' 应该改为 'if count>=1' 所以它也会在第一次通过时注意到它。谢谢。

以上是关于在 Python 3 中比较字符串的主要内容,如果未能解决你的问题,请参考以下文章

r“string”b“string”u“string”Python 2/3比较

python-字符串比较

python中怎么比较文件名字符与文件指定位置内容字符是不是一致?

[Python]-5-比较运算

在python中比较字符串的最快方法

python字符串连接方法效率比较