python处理字符串的一些技巧
最近两个周,在MySQL方向的投入比较少,都是在看一些前人写的python脚本,之前使用python都是在django中写后端逻辑,对于python的脚本其实用的不多,今天再整理一些python脚本中使用的技巧吧。
1、文本中字符串的连接方法join
join的方法是使用一个字符串将已有的内容连接起来,下面分别演示了连接元组、列表和字典的方法:
1元组---直接连接
2>>> str='-'
3>>> seq=('a','b','c')
4>>> print str.join(seq)
5a-b-c
6
7列表
8>>> list=['1','2','3','4','5']
9>>> print(''.join(list))
1012345
11如果想要保持list中的样子,可以用下面的方法:
12>>> print("'"+"','".join(list)+"'")
13'1','2','3','4','5'
14
15字典
16>>> seq = {'hello':'nihao','good':2,'boy':3,'doiido':4}
17>>> print('-'.join(seq))
18boy-good-doiido-hello
需要注意的是,在使用字典的连接是,本质上是对key的连接,而不是对value的连接。
既然有连接的函数,自然也有拆分的函数,它就是split函数,该函数的用法如下:
1>>> str="name#age#score"
2单引号和双引号的不同
3>>> print str.split('#')
4['name#age#score']
5>>> print str.split("#")
6['name', 'age', 'score']
7
8括号内的1表示分割次数,将str分成两份,默认是-1,表示全部分割
9>>> print str.split("#",1)
10['name', 'age#score']
11
12括号外的1表示取分割之后下标为1的值
13>>> print str.split("#")[1]
14age
上面的例子中,我们对字符串使用‘#’分割,可以看到,单引号和双引号的结果不同,1放在括号内和括号外的意义也不同。
还可以一次指定多个分割符:
1>>> import re
2>>> a='Beautiful, is; better*than\nugly'
3>>> # 四个分隔符为:, ; * \n
4... x= re.split(',|; |\*|\n',a)
5>>> print(x)
6['Beautiful', ' is', 'better', 'than', 'ugly']
7>>>
上面的例子中,我们使用4个分隔符来讲字符串a进行分割。
还可以将分割的结果直接保存在变量里面,如下:
1>>> addr = "123@163.com"
2>>> usr,web = addr.split('@')
3>>> print usr,web
4123 163.com
2、文本字符串的格式化输出format方法
1>>> "{} {}".format("hello", "world") # 不设置指定位置,按默认顺序
2'hello world'
3
4>>> "{0} {1}".format("hello", "world") # 设置指定位置
5'hello world'
6
7>>> "{1} {0} {1}".format("hello", "world") # 设置指定位置
8'world hello world'
9
10针对dict
11>>> print("姓名:{name}, 年龄 {age}".format(name="yeyz", age=26))
12姓名:yeyz, 年龄 26
13
14###两个**代表解析该dict
15>>> info={"name":"yeyz","age":26}
16>>> print("姓名:{name}, 年龄 {age}".format(**info)
17姓名:yeyz, 年龄 26
18###针对list的解析
19>>> my_list = ['yeyz', 26]
20>>> print("姓名{0[0]}, 年龄 {0[1]}".format(my_list)) # "0" 是必须的
21姓名yeyz, 年龄 26
22
23还可以直接传入对象
24>>> class AssignValue(object):
25... def __init__(self, value):
26... self.value = value
27...
28>>> my_value = AssignValue(6)
29>>> print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
30value 为: 6
这里解释一下最后传入对象时候的__init__函数,该函数作为初始化方法可以用来设置对象属性,并给予初始值,可以是参数或者固定值,类似于C++中的构造函数,无需手动调用。
3、常用的字符串处理函数。(数量太多,这里不做演示了)
通用函数:
len()
返回对象长度
str in s
检测str存在于s中,可以理解为substring函数,返回bool值
startswith()和endswith()方法
分别用来判断字符串的前缀和后缀是否是指定的字符。
查找类函数
find:查找子串出现在字符串中的位置,如果查找失败,返回-1
index:与find函数类似,查找失败报出ValueError异常
rfind:从后向前找
rindex:和index类似,从后向前找。
大小写相关的函数
upper 字符串转换为大写
lower 字符串转换为小写
isupper 判断字符串是否都是大写
islower 判断字符串是否都是小写
swapcase 将字符串中小写转换为大写,大写转为小写
capitalize 首字母大写
istitle 判断是否是标题
最后一个istitle我们解释一下:
1>>> "Hello,World".istitle()
2True
3>>> "hello,World".istitle()
4False
我们知道,标题一般是首字母大写的,如上面的测试,如果首字母没有大写,那么则不会被判断成为标题。
4、strip函数、rstrip函数,lstrip函数,用于裁剪字符串两边
看例子:
1>>> aaa="###Hello,world##"
2>>> aaa.strip('#')
3'Hello,world'
4>>> aaa.lstrip('#')
5'Hello,world##'
6>>> aaa.rstrip('#')
7'###Hello,world'
其中。lstrip代表left侧,左侧裁剪,r代表右侧裁剪。
举一反三一下,这个裁剪的函数其实可以用来去掉一个字符串的前缀或者后缀。
最常用的一些文本字符串处理函数大概就上面这么多了,想要用好这些函数,还是要多实践才行。