python中的string相关用法(1)
今天自学python中的额时候,发现了很多技巧性的方法,于是幡然醒悟,觉得脑子并不够用,是时候做个笔记了。
注:以下的内容多数来自周伟那本python教材,自己加以整理和利用……我是一个苦逼的大学生,诸位高手大神发现错误,还望及时指出。
纪念我的第一次写博客……
字符串的格式化输出
这个没说的,举个栗子:
>>>age=21
>>>> name="Simon"
>>> print "name is %s,age is %d" %(name,age)
注意:顺序和前面的出场顺序相同,且对应的类型应该一致。
常用的:%s替换字符串,%d替换数字,%f格式化浮点数,指定精度,大家有兴趣可以试一下看看有什么惊喜。
(我帮你们这群懒人试了。如下:)
>>> print "f is %f" %1.23
f is 1.230000
>>> print "可以指定位数 %.1f"%3.1415
可以指定位数 3.1
还可以对齐输出:
>>> word="hello"
>>> print word.center(20)
hello
>>> print word.center(20,"*")
*******hello********
>>> print word.ljust(0)
hello
>>> print word.rjust(20)
hello
注意都是类中的方法。20代表将hello算在内一共输出20个字符。
strip()函数
strip()函数可以去掉字符串中的转义字符和空格。但是这个空格只能去掉第一个字母之前和最后一个字母之后的,如果字符串中本身有空格,那是去不掉的。
举个栗子:
>>> s="\n hello world \n "
>>> print s
hello world
>>> print s.strip()
hello world
字符串的合并
在java中一个 + 是多么省事的事情啊。
其实在python中也可以,但是就只能针对于str+str这种类型的了。
>>> s2="Simon"
>>> s22="is cool"
>>> print s2+s22
Simonis cool
>>> age=21
>>> print s2+age
Traceback (most recent call last):
File "<pyshell#30>", line 1, in <module>
print s2+age
TypeError: cannot concatenate 'str' and 'int' objects
官人别急,素贞用int(age) 一下,也是可以的。
另外python提供了 join()函数,join()函数和列表更配哦
举个栗子:
>>> l=["Simon","is","cool"]
>>> print "".join(l)
Simoniscool
简单粗暴到连空格都不加。
字符串的截取
字符串的截取简直so easy。
字符串支持索引,索引扩展一点就是逆天的切片功能。
切片的格式如下:
- string[start:end:step]
举个栗子:
>>> s="Simon is so cool"
>>> print s[0]
S
>>> print s[2:10:2]
mni
注意end的那个值是取不到的。
三个参数都可以省略。
>>> print s[::2]
Smni oco
如果要同时截取多个字符串,那就要请出split()函数了:
- split([char][,num])
char是分割的字符串,默认是空格。
实践一下:
>>> l=raw_input("请输入用户名用空格分开\n").split()
请输入用户名用空格分开
Simon Amy Tom
>>> print l
['Simon', 'Amy', 'Tom']
可以将用户输入的东西分成一个列表返回来。
当然你要是非得用逗号隔开也没办法:
>>> l=raw_input("请输入用户名用逗号分开\n").split(",")
请输入用户名用逗号分开
Simon,Amy,Tom
>>> print l
['Simon', 'Amy', 'Tom']
至于num参数是指定分成几个片段。用法自己动手试一下。
startswith()和endswith()函数
- startswith(substring[,start[,end]])
其中的start和end其实就是切了个片,看看在这个片是不是以substring开头(或结尾)。
>>> s="Simon is so cool"
>>>> print s.startswith ("Si")
True
>>> print s.startswith ("Simon",0,3)
False
>>> print s.startswith ("Simon",0,7)
True
如果你实在懒得算end的值,那这样:
>>> print s.startswith ("Simon",0,len(s))
True
字符串的反转
python没有善良到给你整个逆转的字符串。
如果你是个勤劳的小蜜蜂,不辞辛劳遍历一遍,那这样做也没什么问题:
>>> def reverse(s):
out=""
l=list(s)
for i in range(len(l),0,-1):
out+="".join(l[i-1])
return out
>>> print reverse("hello")
olleh
你肯定不勤劳,还嫌上面这种方法笨对不对?
其实str没有反转的方法,但是list有啊?
要知道把str变成list都不用把冰箱门儿打开……
举个栗子:
>>> def reverse(s):
l=list(s)
l.reverse()
s="".join(l)
return s
>>> print reverse("hello")
olleh
虽然看着没简单多少,至少复习了一下join()函数对不对?
你要是还嫌麻烦,那我要是不憋个大招叫你看看,你都不知道马王爷几只眼……
>>> s="hello"
>>> print s[::-1]
olleh
其实是用到了切片功能。-1是反着来的意思。
其实人家原来的用法是这个样子的:
>>> s="hello"
>>>> print s[5:1:-1]
oll
注意如果是-1,那前边也得倒着写。
你可以理解为是切了个片,又倒了一下。
字符串的查找和替换
送你几个函数,不用谢了。
查找:find(),rfind()
- find(substring[,start[,end]])
举个栗子:
>>> s="hello"
>>>> print s.find("hi")
-1
>>> print s.find("l")
2
>>> print s.find("ll")
2
找不到返回-1
另一个rfind()是从后边找的意思。
>>> s="hello"
>>> print s.find("l")
2
>>> print s.rfind("l")
3
你这么聪明,一定猜到start和end就是切了个片
替换:replace()
- replace(old,new[,max])
old被替换为new max次
举个栗子:
>>> s="hello amy,hello tom"
>>>> print s.replace("hello","byebye",1)
byebye amy,hello tom
日期和字符串的相互转换
time模块提供了函数strftime()
- strft(format[,tuple])
返回一个字符串。其中的format是类似于
&Y-%m-&d
的格式。tuple是时间元组,一般也不用自己写。
举个栗子:
>>> import time
>>>> print time.strftime("%Y-%m-%d-%X",time.localtime())
2016-10-23-22:45:54
其中%Y的不一样,最后的结果也不一样。
小结:第一次写博客,果然很累。
蜗牛要洗澡去了,再不洗宿舍停水了。
欲知高级用法,请听下回分解。