1.什么是字符串
什么是字符串?
python3里面是unicode序列
在python2里面是byte序列
字符串也是不可变的
支持切片 也支持索引 支持解包操作
支持遍历
用在哪些特定的环境
为什么是内置数据结构
In [26]: s = 'geek'
In [27]: s
Out[27]: 'geek'
In [28]: s[0]
Out[28]: 'g'
可以反转:
In [30]: s[::-1]
Out[30]: 'keeg'
In [31]:
支持解包
In [36]: a = 'geek'
In [37]: g,*s = a
In [38]: g
Out[38]: 'g'
In [39]: s
Out[39]: ['e', 'e', 'k']
In [40]:
2.字符串的连接
**join使用方法:**
In [45]: list = ['my','name','is ','steven']
In [46]: list
Out[46]: ['my', 'name', 'is ', 'steven']
In [47]: ' '.join(list)
Out[47]: 'my name is steven'
In [48]: ','.join(list)
Out[48]: 'my,name,is ,steven'
In [49]:
###字符串的分割
**split** 从左边开始分割
**rsplit** 从右边开始分割
**splitlines**
**partition**
**rpartotion**
**split练习使用**
In [119]: a = "my name is steven"
In [120]: a
Out[120]: 'my name is steven'
In [121]: a.split()
Out[121]: ['my', 'name', 'is', 'steven']
In [122]: a.split('is')
Out[122]: ['my name ', ' steven']
In [123]: a.split(' ', 1)
Out[123]: ['my', 'name is steven']
In [124]: a.split(' ', 2)
Out[124]: ['my', 'name', 'is steven']
In [125]: a.split(' ', 3)
Out[125]: ['my', 'name', 'is', 'steven']
In [126]: a.split(' ', 4)
Out[126]: ['my', 'name', 'is', 'steven']
In [127]: a.split(' ', -1)
Out[127]: ['my', 'name', 'is', 'steven']
案例:
In [131]: line = 'usr:http://opsnotes.net'
In [132]: line.split()
Out[132]: ['usr:http://opsnotes.net']
In [133]: line.split(':', 1)
Out[133]: ['usr', 'http://opsnotes.net']
In [135]: key, value = line.split(':', 1)
In [136]: key
Out[136]: 'usr'
In [137]: value
Out[137]: 'http://opsnotes.net'
In [138]:
**splitlines的使用方法:**
In [138]: text = '''i an geek
.....: i an a boy'''
In [139]: text
Out[139]: 'i an geek\ni an a boy'
In [140]: text.splitlines()
Out[140]: ['i an geek', 'i an a boy']
In [141]:
**partition的使用方法:**
In [141]: a
Out[141]: 'my name is steven'
In [142]: a.partition(' ')
Out[142]: ('my', ' ', 'name is steven')
In [143]: a.split(' ', 1)
Out[143]: ['my', 'name is steven']
In [144]: line.partition(':')
Out[144]: ('usr', ':', 'http://opsnotes.net')
In [145]: key, _, value = line.partition(':')
In [146]: key
Out[146]: 'usr'
In [147]: _
Out[147]: 'usr'
In [148]: value
Out[148]: 'http://opsnotes.net'
In [149]:
3.字符串修改
自然语言修改
会返回一个新的字符串不会修改原来的需求
In [23]: a
Out[23]: 'my name is steven'
In [24]: a.capitalize()
Out[24]: 'My name is steven'
In [25]: a.title()
Out[25]: 'My Name Is Steven'
In [26]: a.lower()
Out[26]: 'my name is steven'
In [27]: a.upper()
Out[27]: 'MY NAME IS STEVEN'
大小写转换通常用在我们做比较的时候。
####程序世界的修改(center ljust rjust zfill)非重要
center是从两边开始填充
In [6]: a.center(80)
Out[6]: ' my name is steven '
In [7]: a.center(80,'#')
Out[7]: '###############################my name is steven################################'
In [8]:
In [8]: help(a.ljust)
Help on built-in function ljust:
ljust(...) method of builtins.str instance
S.ljust(width[, fillchar]) -> str
Return S left-justified in a Unicode string of length width. Padding is
done using the specified fill character (default is a space).
(END)
ljust的使用从右边开始填充
In [10]: a.ljust(80,'*')
Out[10]: 'my name is steven***************************************************************'
In [11]:
添加页码的方法:
In [12]: a.ljust(80) + '01'
Out[12]: 'my name is steven 01'
rjust是从左边开始填充
In [13]: a.rjust(80,'*')
Out[13]: '***************************************************************my name is steven'
In [14]:
zfill使用
In [14]: a.zfill(80)
Out[14]: '000000000000000000000000000000000000000000000000000000000000000my name is steven'
**strip** 全部的空白
**lstrip** 去除左边的空白
**rstrip** 去除右边的空白
**strip的使用方法**
In [15]: b = ' hah \n \t'
In [41]: b.strip()
Out[41]: 'hah'
In [42]: b.rstrip()
Out[42]: ' hah'
In [43]: b.lstrip()
Out[43]: 'hah \n \t'
In [44]:
In [17]:
In [26]: f = open('hello.py')
In [28]: f.readline
Out[28]: <function TextIOWrapper.readline>
In [29]: f.readline()
Out[29]: '#!/usr/bin/env python\n'
In [30]: f.readline().strip()
Out[30]: "print ('hello world!')"
In [31]: f.close()
4.字符串的判断
**startswith** 用的非常多
# **endswith** 用的非常多
**is_* 用的比较少
**startswith使用方法
In [47]: b = '##test##'
In [49]: b.startswith('#')
Out[49]: True
In [50]: b.startswith('##')
Out[50]: True
In [51]: b.startswith('###')
Out[51]: False
In [52]:
In [52]: line1 = "UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0 1 1"
In [53]: uuid = '6634633e-001d-43ba-8fab-202f1df93339'
In [54]: line1.startswith(uuid,5)
Out[54]: True
**endswith的使用方法,从后面判断
In [57]: line1
Out[57]: 'UUID=6634633e-001d-43ba-8fab-202f1df93339 / ext4 defaults,barrier=0 1 1'
In [58]: line1.endswith('0')
Out[58]: False
In [59]: line1.endswith('1')
Out[59]: True
In [60]:
**is_*的使用方法,多中判断
In [61]: line1.isupper()
Out[61]: False
In [62]: line1.islower()
Out[62]: False
In [63]: line1.isdigit()
Out[63]: False
In [64]: '123'.isdigit()
Out[64]: True
In [65]:
5.查找替换
**count**
**find**
**rfind**
**index**
**rindex**
**replace**
**count的用法,count统计可以统计一个字母也可以统计一个单词
In [13]: a
Out[13]: 'my name is steven'
In [14]: a.count('+')
Out[14]: 0
In [15]: a.count('m')
Out[15]: 2
In [16]: a.count('s')
Out[16]: 2
In [17]:
In [18]: a.find('s')
Out[18]: 9
**find的用法,最早出现的位置,可以找一个字符也可以找一个数字,查找索引,从开始查找
In [19]: a
Out[19]: 'my name is steven'
In [20]: a.find('s')
Out[20]: 9
In [21]: a.find('m')
Out[21]: 0
In [22]:
**index的使用方法
n [23]: a.index('t')
Out[23]: 12
In [24]: a.rindex('t')
Out[24]: 12
####index和find的区别,当一个不存在的时候
In [27]: a.rindex('c')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-27-b8abc29ea215> in <module>()
----> 1 a.rindex('c')
ValueError: substring not found
In [28]: a.find('c')
Out[28]: -1
In [29]:
**replace的使用方法
In [30]: s = 'abc123abc123'
In [31]: s.replace('abc','xyz')
Out[31]: 'xyz123xyz123'
In [32]: s
Out[32]: 'abc123abc123'
In [33]: s.replace('abc','xyz',1)
Out[33]: 'xyz123abc123'
In [35]: s.replace('abc','')
Out[35]: '123123'
In [36]: s.replace('abc','xyz', -1) 如果是负数不存在的时候 会全部被替换掉
Out[36]: 'xyz123xyz123'
In [37]:
6.字符串格式化
https://docs.python.org/3/library/stdtypes.html#text-sequence-type-str
字符串格式化
In [4]: 'i an %s' % ('geek',)
Out[4]: 'i an geek'
In [5]:
template % tuple template % dict
In [5]: 'i an %(name)s' % {'name':'steven'}
Out[5]: 'i an steven'
In [9]: 'i am %s ' % 'steven'
Out[9]: 'i am steven '
In [10]:
小括号在代码里面有特殊意义,如果不加,会变成其他的
In [8]: 'i an %(name)s,my name is %(name)s' % {'name':'steven'}
Out[8]: 'i an steven,my name is steven'
In [9]:
什么时候需要字典?
内容反复出现
需要格式化更多内容很多
python中%i和%d没有区别 在C中有区别
In [11]: '%d' % 18
Out[11]: '18'
In [12]: '%i' % 18
Out[12]: '18'
In [13]: '%li' % 18 ####l会自动忽略掉
Out[13]: '18'
X代表16进制
In [14]: '%x' % 18
Out[14]: '12'
In [15]: '%X' % 18
Out[15]: '12'
In [16]: '%X' % 12
Out[16]: 'C'
In [17]: '%x' % 12
Out[17]: 'c'
In [18]:
e代表浮点数
In [19]: '%e' % 0.000015
Out[19]: '1.500000e-05'
In [20]: '%E' % 0.000015
Out[20]: '1.500000E-05'
In [21]:
字符串r和s的区别
任意都可以使用%s
%a 把中文修改成字符
%f 默认显示6位
In [3]: '%f is love' % 123
Out[3]: '123.000000 is love'
In [4]:
In [4]: '%+d' % 123
Out[4]: '+123'
In [5]: '%-d' % 123
Out[5]: '123'
In [6]: '%dd' % 123
Out[6]: '123d'
In [7]:
%s %d %f 是用的最多的
###format格式方法 python3的特性
In [7]: 'i am {}'.format('steven')
Out[7]: 'i am steven'
In [8]: 'i am {}, my age is {}'.format('steven',25)
Out[8]: 'i am steven, my age is 25'
In [9]: 'i am {1}, my age is {0}'.format('steven',25)
Out[9]: 'i am 25, my age is steven'
In [11]: 'i am {name}, my age is {age}'.format(name='steven',age=25)
Out[11]: 'i am steven, my age is 25'
In [12]:
In [13]: 'i am {0}, my name is {0}'.format('steven',25)
Out[13]: 'i am steven, my name is steven'
In [14]:format(里面参数是从0开始)
关键字要在后,两边对应,format后面要从0开始计数
In [15]: '{} {} {name}'.format(1,2,name='steven')
Out[15]: '1 2 steven'
In [16]: '{} {name} {}'.format(1,2,name='steven')
Out[16]: '1 steven 2'
In [17]: '{name} {} {}'.format(1,2,name='steven')
Out[17]: 'steven 1 2'
In [18]:
In [19]: 'i {}, name {}, age {}, sex {}'.format('steven', 28, 'steven', 'M')
Out[19]: 'i steven, name 28, age steven, sex M'
In [20]:
居中左边右边对齐
In [21]: '{0:80}'.format('学习成长')
Out[21]: '学习成长 '
In [22]: '{0:^80}'.format('学习成长')
Out[22]: ' 学习成长 '
In [23]: '{0:<80}'.format('学习成长')
Out[23]: '学习成长 '
In [24]: '{0:80}'.format('学习成长')
Out[24]: '学习成长 '
In [25]: '{0:>80}'.format('学习成长')
Out[25]:
+号如果是负数 不管加不加都显示负数,其中0是索引
In [27]: '{0:+}'.format(10)
Out[27]: '+10'
In [28]: '{0:+}'.format(-10)
Out[28]: '-10'
In [29]: '{0:-}'.format(-10)
Out[29]: '-10'
In [30]: '{0:-}'.format(10)
Out[30]: '10'
In [31]:
//添加宽度之后类似于右对齐
In [31]: '{0:80}'.format(10)
Out[31]: ' 10'
//如果是字符串会报异常
In [36]: '{0:d}'.format(10)
Out[36]: '10'
In [37]: '{0:d}'.format(steven)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-37-48cb87f81982> in <module>()
----> 1 '{0:d}'.format(steven)
NameError: name 'steven' is not defined
In [38]: