Python从网页中提取到了一段数据,怎么在这段数据中查找是否存在我想要的并返回一个结果?
天蓬老师
天蓬老师 2017-04-18 09:07:17
[Python讨论组]

比如具体代码如下:
print result
32:aaaaaa
33:bbbbbb
34:ccccccc
35:ddddddd
如果我想知道这些数据里面是否包含字符窜‘aaaaaa’,如果是则返回前面的数值。否的话则返回一个‘Not Match’之类的,该怎么写这一段代码?目前type(result)的结果是unicode,是否需要转化为字典?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHP中文网
# -*- coding:utf-8 -*-

result = """32:aaaaaa
33:bbbbbb
34:ccccccc
35:ddddddd"""


def getNumber(str):
    for line in result.split('\n'):
        group = line.split(':')
        if str in group:
            return group[0]
    return False

if __name__ == '__main__':
    print(getNumber('aaaaaa'))
    print(getNumber('asdfe'))
32
False
迷茫

正则匹配, 把想要的部分写成正则表达式

http://cuiqingcai.com/977.html

http://www.runoob.com/python/python-reg-expressions.html

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

大家讲道理

@liguangsheng 的想法是對的, 可惜代碼有一點點問題

def getNumber(str):
    for line in result.split('\n'):
        group = line.split(':')
        if str in group:
            return group[0]
        return False # <------------------------ 問題出在這裡

這會導致第一行沒有找到 str 就失敗, 比如說可以試一下:

print(getNumber('bbbbbb'))

這應該找的到的, 但會回傳 False

我小改了一下:

def find(data, keyword):
    pairs = (line.strip().split(':') for line in result.split('\n'))
    for i, words in pairs:
        if keyword in words.split():
            return i
    return None # <--------- return should be here

if __name__=='__main__':

    result = """32:aaaaaa
    33:bbbbbb
    34:ccccccc
    35:ddddddd"""

    print(find(result, 'aaaaaa'))
    print(find(result, 'ccccccc'))
    print(find(result, 'abcdefg'))

結果:

32
34
None

我回答過的問題: Python-QA

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号