鱼C论坛

 找回密码
 立即注册
查看: 2439|回复: 4

find 函数

[复制链接]
发表于 2016-7-2 21:38:06 | 显示全部楼层 |阅读模式
50鱼币
import urllib.request as ur
mmurl = 'https://mm.taobao.com/json/request_top_list.htm?type=o&page='
i = 1
ph = -1
while i < 5 :
    url = mmurl + str(i)
    print(url)
    up = ur.urlopen(url)
    cont = up.read()
    print('---------------------')
    for j in range(10) :
        print()
    print(cont)
    head ='<img src='
    tail ='.jpg'
    ph = cont.find('<img src=')
    pj = cont.find('.jpg',ph + 1 )
    print(cont[ph:pj])
    for j in range(10) :   
        print()
    print('---------------------')
    i += 1
   

以上是程序,有个小问题
1. pj = cont.find('.jpg',ph + 1 ) 为什么要用 ph +1 说是偏移 但并不理解

最佳答案

查看完整内容

首先你要知道find()各参数的作用, 各个参数的作用:第一个是你要查找的字符串,第二个是查找的起始位置,第三个是终止位置 所以这行代码中 pj = cont.find('.jpg',ph + 1 ) ph + 1对应的就是查找的起始位置 为什么要这样写呢,你看下面的例子就明白了 比如现在有一串字符串,我需要把其中的图片地址提取出来 最终的结果应该是Aloha.jpg 那我①要找到A的位置,②找到g的位置,头尾的位置找到了,那么两个数字中间 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-2 21:38:07 | 显示全部楼层
首先你要知道find()各参数的作用,
str.find(sub[, start[, end]])
Return the lowest index in the string where substring sub is found, such that sub is contained in the slice s[start:end]. Optional arguments start and end are interpreted as in slice notation. Return -1 if sub is not found.

各个参数的作用:第一个是你要查找的字符串,第二个是查找的起始位置,第三个是终止位置
所以这行代码中 pj = cont.find('.jpg',ph + 1 )    ph + 1对应的就是查找的起始位置

为什么要这样写呢,你看下面的例子就明白了
比如现在有一串字符串,我需要把其中的图片地址提取出来
  1. count=r'salfdhhi<img src="Aloha.jpg"fkngskdghl'
复制代码

最终的结果应该是Aloha.jpg
那我①要找到A的位置,②找到g的位置,头尾的位置找到了,那么两个数字中间的就是我要的了
但是①不可以直接搜索A的位置,因为字符串中可能会有很多其他的A干扰,那我就找一个唯一的标志符,那这样前面的<img src=就很好地满足了我的要求,所以我要先把它的位置找到,对应于这行代码
  1. ph = cont.find('<img src=')
复制代码


②我现在找到了开头,还需要找到结尾,而这里的图片是以.jpg结尾的,所以我接着找.jpg的位置就可以了,而我的.jpg一定实在我图片起始位置的后面,所以我就把起始位置的参数填上,也就是ph + 1,从这里开始往后找。对应的代码就是
pj = cont.find('.jpg',ph + 1 )

其实到这里还没完,你看下面的例子
  1. >>> count=r'salfdhhi<img src="Aloha.jpg"fkngskdghl'
  2. >>> count.find('<img src=')
  3. 8
  4. >>> count[8]
  5. '<'
  6. >>> count.find('.jpg', 9)
  7. 23
  8. >>> count[23]
  9. '.'
  10. >>> count[8:23]
  11. '<img src="Aloha'
复制代码

你看最后的结果,其实还不对,所以还应该做一下处理
  1. >>> count[8+9: 23+4]
  2. '"Aloha.jpg'
复制代码

把前面<img src=空过去,再把后面的.jpg加回来,这样就完成了最开始的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-3 10:08:00 | 显示全部楼层
find函数不就是这样用的吗?
  1. >>> a="123123"
  2. >>> a.find('1',0)
  3. 0
  4. >>> a.find('1',1)
  5. 3
  6. >>> a.find('1',-1)
  7. -1
  8. >>> a.find('1',-2)
  9. -1
  10. >>> a.find('1',-3)
  11. 3
  12. >>>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-4 14:59:20 | 显示全部楼层
好像是find函数中,找到了'.jpg'就会返回ph+1,但是ph+1不能为负数,而ph为-1,所以只有加1进行偏移
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-31 08:49:27 | 显示全部楼层
应该是位置的意思吧。,
假如:<img src="img.jpg">
要找后面的"img.jpg"
我理解的是,返回<img src= 的位置,然后,取后面'img.jpg'中的img去匹配
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 16:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表