在程序编译的过程中往往会遇到一些意想不到的小问题,这些问题看上去没有这么复杂,但是想要把他们处理得当却也需要花费不小精力。今天就写一写昨天编程的时候遇到的字符串切片问题。
字符串切片
在python中字符串的切片有多种方法,比如:直接定位切片str[x:x]、split切片、strip切片和slice切片等。这些切片方法各有用处,在面对一些简单的纯字符串或者数字切片问题时能发挥作用,但如果遇上多种符号混合的字符串切片问题时就比较困难了。先给大家看一下昨天我遇到的问题:
我需要自己拼凑一个链接,这个链接是基于一个已知的链接基础之上的(http://detail.zol.com.cn/cell_phone_index/subcate57_613_list_1_0_1_2_0_4.html)
其中http://detail.zol.com.cn/cell_phone_index/subcate57_613_list是变量now_url的某一具体值,而我要做的事情是将_1_0_1_2_0_4.html中的“4”替换成一个变量n,这个n会随着一个for函数而变化。 (博主新手菜鸟,各位python大神可以先试试看怎么能够实现这一目标)
好了,先给大家说一下我的思路。
1、我的第一个思路就是既然我要把4替换掉,那么我就先把这个链接按4前后分别切开,插入一个n,然后在重新组合起来。那怎么把4前后分别切开呢?我想到可以用split函数,分别以"_"和"."作为分隔符。于是我开始写语句了。
link='http://detail.zol.com.cn/cell_phone_index/subcate57_613_list_1_0_1_2_0_4.html'
n1=link.split("_")[:-1]
n2=link.split(".")[-1:]
for i in range(0,30):
now_url=str(n1)+str(i)+str(n2)
print(now_url)
结果出现了这个
很显然,虽然按照我的想法把n插入进了链接当中,但是split函数直接把链接切成了列表形式,这显然不是我想要的结果。于是思考之后我使用了第二种方法。
2、为了不再把链接切成列表,所以我打算直接指定切割,即把字符串link直接指定位置。
link='http://detail.zol.com.cn/cell_phone_index/subcate57_613_list_1_0_1_2_0_4.html'
n1=link[:-6]
n2=link[-5:]
for i in range(1,30):
now_url=str(n1)+str(i)+str(n2)
print(now_url)
这个方法似乎是可行的,只是各位切割的时候要小心谨慎,数好次序,任何一个符号都是作为字符有编号的。但这么切割 好像还是很复杂,所以想要偷懒的我又进行了第三次尝试。
3、为了不一个个数要切的顺序,我开始思考有没有split的变换函数,能够实现从后往前切片的思想。即我以"_"作为分隔符,从后往前数,对其进行限制,只做一次切片,这样不就保留了最后一个_之前的所有字符串了吗。抱着这个想法,我在网上搜了一下,结果只出现了一个很类似的函数,叫做rstrip函数,我进行了尝试。
为什么结果切了和没切差不多呢?我很疑惑地回头去看了一下rstrip函数的定义,恍然大悟,原来rstrip函数虽是从末尾向前开始切割,但是它所认定的分隔符必须在字符串的末尾,不会进入字符串中去自己寻找对应的内容,如果在末尾没有找到相对应的内容,那么就不进行切割。(所以我这种想要从后往前切割的想法破灭了,当然可能是我没有找到最好的方法,希望如果有尝试过的大神能告诉萌新有没有偷懒函数。)
4、于是——我又进行了尝试。这一次我想一步到位,既然我想要替换字符串中的某一指定字符,那么能不能找到一个函数直接实现这种替换功能呢?这次我用了replace函数,思路是:还是先把"4"这个位置的数切开,然后用n来替换它。
link='http://detail.zol.com.cn/cell_phone_index/subcate57_613_list_1_0_1_2_0_4.html'
n1=link.split("_")[-1]
n2=n1.split(".")[0]
for i in range(1,30):
now_url=link.replace(str(n2),str(i))
print(now_url)
这个方法也是相当ok的,也是我最喜欢的方法,又方便又快速。 但是使用replace函数时,需要注意的是替换的字符串要定位清晰,如果没有指定位置的话,可能链接中会存在有两个相同片段的情况,执行命令后都会被替换掉。
5、最后来说一种逻辑很清楚的切片方法,思路还是老样子,和第一种一样,不过解决了切完之后字符串变成列表失去所有分隔符的问题。 方法就是先切开,然后用join函数再粘连起来。
link='http://detail.zol.com.cn/cell_phone_index/subcate57_613_list_1_0_1_2_0_4.html'
n1=link.split("_")[-1]
n2=n1.split(".")[0]
n3="_".join(link.split("_")[:-1])
for i in range(1,30):
now_url=str(n3)+"_"+str(i)+".html"
print(now_url)
此方法逻辑较为清楚,但执行起来比较繁琐。
以上就是我在编程过程中所遇到的字符串切割问题,处理方法很多,思考起来也很有乐趣。