设为首页 收藏本站
查看: 1372|回复: 0

[经验分享] python第二周 字符串

[复制链接]

尚未签到

发表于 2018-8-16 07:51:03 | 显示全部楼层 |阅读模式
  字符串是一个有序的字符的集合,用来存储和表现基于文本的信息,python的内置数据结构之一。字符串是多个字符组成的序列,因此支持序列的相关操作。
  支持的操作有:
  1. 通过索引来访问
>>> s = 'this is a test string'  
>>> len(s)  #len()函数可以得到字符串的长度
  
21
  得到字符串的长度以后,就可以根据索引来访问字符串的内容。
>>>s[0]   #正向索引  
't'
  
>>>s[-1]  #反向索引时,索引值从右往左计数,从-1开始计数。
  
'g'
  2. 支持分片操作
>>>s[0:4]  
'this'
  
>>>s[:4]                        #没有左值,表示从第一个值开始
  
'this'
  
>>>s[0:]#没有右值,表示从开始位置到最后一个值
  
'this is a test string'
  
>>> s[::2]#有步进值2,表示每隔2个取一个值。
  
'ti sats tig'
  3. 支持两个字符串相加
>>>s = s + ' xyz'  
>>>s
  
'this is a test string xyz'
  字符串具有的相关属性:字符串变量定义里以后,字符串内的字符不可改变。
  常用的字符串方法
find在一个较长的字符串中查找子字符串并返回字串所在位置的最左端索引,没有则返回-1join在队列中添加元素lower返回字符串的小写字母版replace返回某字符串的所有匹配项被替换之后得到的字符串split将字符串分割成序列strip返回去除两侧空格的字符串translate替换单个字符,进行多个替换。join' '.join(str)在字符串str的每个元素之间插入分隔符 ' ',' '也可以替换为其他字符ord将一个字符转换成对应的ASCII值rstrip去掉最右边空格的字符串chr将整数字符串转换成对应的字符  除了上面那些自带方法外,Python标准库re模块支持更高级的基于模式的字符串处理,还有更高级的文本处理工具,如XML解析器。
  字符串种类

  •   单引号、双引号和三引号代表的字符串相同
  •   转义字符,常见的有\n,\t,\\,\',\"
  •   raw字符串:r"c:\new\test.spam",此时会抑制转移字符,使得字符串仅代表字面上的意思。但是raw字符串不能以单个 \ 结尾。
  •   Bytes字符串:b'sp\x01am'
  •   Python2中的Unicode字符串:u'eggs\u0020spam',python3中默认字符串就是Unicode字符串。
  字符串和数字的转换:
  int() 方法将字符串转换为数字
  str() 方法将数字转换为字符串
  ord(s) 方法讲字符串转换为对应的ASCII码
  chr(n) 方法讲ASCII数字转换味对应的字符。
  字符串格式化(最重要的内容)
  1. 格式化表达式,使用print或printf输出,基本格式如下:
  "%[(name)][flags][width][.precision] typecode"  %  要输出的内容
  字段含义如下:
  (name)表示根据名称自动解析后面的对象,讲name对应的值显示出来
  示例:
print('%(n)d, %(x)s' % {"n":1, "x":"spam"})  
'1, spam'
  flags        转换标志,- 表示左对齐,+ 表示在转换值前面加上正负号,0表示转换值宽度不够时用0填充。
  width       输出字符串的宽度
  .precision 输出小数时,数字的位数,当precision为*号时,表示小数位数由后面的值给出。
  示例:
print('%f, %.2f, %.*f' % (1/3.0, 1/3.0, 4, 1/3.0)  
'0.33333, 0.33, 0.3333'
  typcode:printf style
  字符串格式化的typecode类型
转换类型含义d,i带符号的十进制数o不带符号的八进制数u不带符号的十进制数x不带符号的十六进制(小写)X不带符号的十六进制(大写)e科学计数法表示的浮点数(小写)E科学计数法表示的浮点数(大写)f,F十进制浮点数g如果指数大于-4或者小于精度值则和e相同,其他情况与f相同G如果指数大于-4或者小于精度值则和E相同,其他情况与F相c单字符(接收整数或单字符字符串)r字符串(使用repr转换任意Python对象)s字符串(使用str转换任意Python对象)aASCII字符%显示%  (name)表示使用字典来格式化字符串,使用字典格式化的时机:
  1. 需要格式化的内容反复出现
  2. 需要格式化内容很多
  name对应字典的key,相当于输出dict[name]
  2. 格式化调用方法——format方法
  : 号后面依次是填充字符,对齐方式,输出宽度。。标准格式是:
"{[field_name]![conversion]:[[fill][align]][sign][#][0][width][,][.precision][typecode]}".format('test')  field_name 两种形式,以0,1,2这样的形式时,表示根据位置来查找变量,以keyword形式时,表示字典格式化,对应字典中的键值。
  conversion 表示转换格式,支持三种类型,分别是s|r|a,即str、repr、ascii三种格式的字符串。
  fill     填充字符,可以是除'{'、'}'外的任意字符
  align    对齐方式

  •   '<' 左对齐
  •   '>' 右对齐
  •   '=' 数字对齐
  •   '^' 居中对齐
  sign     仅针对数字类型

  •   '+' 表示正负数都要带上符号
  •   '-' 表示负数要带上符号,默认选项
  •   space 表示正数前面要带一个空格,负数前面带'-'号
  ,     用来分隔数字,例如1,234.5
  width  对齐宽度
  .precision输出小数时,输出数字的位数
  typecode  输出的对象格式,有以下值,和%格式化中的typecode含义一致:
  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
  示例1:直接具体的数值
>>> '{0!s:-^40}'.format('test')  
'------------------test------------------'
  
>>> '{0!r:-^40}'.format('test')
  
'-----------------'test'-----------------'
  示例2:0做填充字符
>>> '{0!s:0^40}'.format('test')  
'000000000000000000test000000000000000000'
  
>>> '{0!r:0^40}'.format('test')
  
'00000000000000000'test'00000000000000000'
  示例3:变量
>>> '{0:{fill}{align}{width}}'.format('test',fill='-',align='^',width='40')  
'------------------test------------------'
  示例4:数字位数(,号用于分隔数字)
>>> '{0:<40,.5}'.format(1234.5678)  
'1,234.6
  '
  示例5:type=b,显示二进制数时。
>>> '{0:<10b}'.format(42)  
'101010'
  基本用法:
  1. '{0},{1} '.format('value0','value1')
  在里{}里的0,1是要输出的变量,对应format里的value0和value1,如果{}里没有编号,则输出时依次输出formt里的内容。调整顺序时对应的输出也会调整,例如 '{1},{0} '.format('value0','value1')的输出结果是value1,value0。
  2. '{name},{age}'.format(name='han',age='25')
  在{}里的变量名和format里的变量名对应,即使调换顺序也不影响
  '{name},{age}'.format(age=25,name='han')
  和上面的输出结果一样
  注意事项:
  在format格式化的过程中,尽量指定各个输出值的位置,这样有利于精准输出
  位置参数必须在关键字参数前面。
  bytes(二进制格式,python3.x特有,python2.x里不区分bytes和str)
  bytes和str的区别在于bytes是byte的序列,而str是unicode的序列
b=str.encode()  
s=bytes.decode()
  bytes注意事项:

  •   在encode()和decode()里可以指定编码转换的格式,例如decode('utf-8')或decode('gbk')。应用于获取网页内容时得到不同编码格式的网页内容统一转换成通用的Unicode格式,便于处理。不同网页的内容需要通过第三方库来猜测网页的编码格式。
  •   网络编程socket数据传输的是bytes格式,发送之前需要用encode()函数将其转换为bytes格式,在接收后需要使用decode()函数将接收到的数据转换为UTF8格式。过程如下:
  数据str encode bytes->网络传输 ->bytes decode 数据str

  •   python2.7转换编码格式
import sys  
reload(sys)
  
sys.setdefaultcoding('utf-8')
  Unicode指的是编码规范,类似于http协议,而GBK,UTF-8类似于apache、nginx,是字符集编码,是对Unicode的支持和实现。bytes一般用于网络数据传输,而str一般用于程序之间的数据处理。因此在网络编程中,数据传输之前,一般要讲str转换成bytes,服务端在接收到bytes以后,要用decode()函数再转换成str。
  bytearray(和bytes类型类似,但是bytearray中内容可变,bytes类型中的数据不可变)
  bytearray用于改变bytes的内容,具体过程如下:
b1=b'1234'  
b2=bytearray(b1)
  
b2[0]=int(b'6'.hex(),16)
  
bytes(b2)
  输出b'6234'
  此时就得到改变后的b1

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552398-1-1.html 上篇帖子: python第二周 数字类型 下篇帖子: python-内置数据结构2
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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