码迷,mamicode.com
首页 > 编程语言 > 详细

Python字符串

时间:2017-08-19 10:56:54      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:swa   范围   item   大括号   头部   文件   oop   like   wap   

字符串
   1.使用单引号“”引起来: Quote me on this
   2.使用双引号“"”引起来: "Whats your name?"

   3.使用三引号(‘‘‘或"""): 可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。 /‘‘‘
     如:
     """This is a multi-line string. This is the first line.
     "What‘s your name?," I asked.
     He said "Bond, James Bond."
     """

   4.转义符“\”
     \\  指示反斜杠本身
     \  指示单引号
     \"  指示双引号
     注意: 行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。

   5.自然字符串
     自然字符串通过给字符串加上前缀r或R来指定,取消转义符的功能。例如: r"Newlines are indicated by \n"。
     三引号的字符串也可以同样用法,如: R‘‘‘Newlines are indicated by \n‘‘‘

   6.unicode 字符串
     Python允许你处理 unicode 文本(超过拉丁文字范围的)——只需要在字符串前加上前缀u或U。
     例如,u"This is a Unicode string.哈哈.."。(Python3.x之后不需要这样了,可以直接写中文;而这样写会报错)
     Python 3.0开始对unicode全面支持,所有的文本(str)都是Unicode的;并引入了一个叫做bytes的新类型来处理字节序列。而编码过的Unicode会以二进制的数据来表示。
     因为在2.x的世界里,大量的bug都是因为已编码的文本和未编码的文本混杂在一起而产生的。

   7.按字面意义级连字符串
     如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。
     例如,"What‘s"  your name?会被自动转为"What‘s your name?"。
     即是说,两个字符串放在一起,会有字符拼接的效果。加号“+”也有字符拼接的效果。

   8.字符串拼接
     可以使用“str1.__add__(str2)”或者“str1 + str2”或者直接两个字符串放一起,来拼接字符串
     但字符串与其它类型拼接时,得先把其它类型转成字符串类型,否则会出错。如“str1 + 2”就会出错,需要“str1 + str(2)”

   9.字符串的乘法运算
    “*”:可以把字符串重复拼接若干次,如: 2 * 3得到6; la * 3得到lalala。但乘以0或者负数时,结果将会是空字符串""10.字符串序列(索引和切片)
     字符串可以使用下标来获取字符串中某个项目,以及截取字符串。
     #字符串的序列,即“索引”和“切片”,参考“1.3.列表、元组和字典.py.txt”的“序列”
     用法如: name = swaroop; name[1]; name[1:3]; name[1:-1]

   11.str(anything)函数和 unicode(anything)函数
     Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有 str()把对象转换为非Unicode字符串。
     Python 3只有一种字符串类型,Unicode字符串,所以 str()函数即可完成所有的功能。(unicode()函数在Python 3里不再存在了。)

   另外:
     没有专门的char数据类型,确实没有需要有这个类型。
     单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。
     正则表达式: 一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。
     使用 help(str) 可查看字符串对象定义的所有方法及属性。
     由于百分号有特殊作用,所以字符串里面要用百分号的话需要使用“%%”,如: "select * from my_table where name like ‘%%测试%%‘"


字符串格式化控制: (未参考帮助文档,只是个人猜测)
   转义符 (Escape Sequence):
   \ddd     1到3位8进制数指定Unicode字符输出(如: “\127”显示“W”)
   \uxxxx   1到4位16进制数指定Unicode字符输出(Python3.x开始支持此写法,如: \u54C8 显示“哈”字)
   \xhh     16进制数指定Unicode字符输出(如: “\xe5\x93\x88”显示“哈”)
   \\          \        \ (单独的一个斜杠也显示斜杠,即不后接有转移作用的字符时,作为斜杠使用)
   \       
   \"       "
   \a       字符: 0x07    响铃(ASCII控制字符)
   \b       字符: 0x08    退格(光标向左走一格)(ASCII控制字符)
   \f       字符: 0x0c    Formfeed(FF)(走纸转页,换页)(ASCII控制字符)
   \n       字符: 0x0a    换行(ASCII控制字符)
   \N{name} Unicode字符   只能针对Unicode
   \r       字符: 0x0d    回车
   \t       字符: 0x09    跳格(tab符号),水平制表符
   \v       字符: 0x0b    垂直制表符

   %%       %
   %d       输出10进制整数,只能是数字类型,输出字符串类型会出错;浮点类型的数字将被取整(直接删除小数部分)。
   %f,%F    以10进制输出浮点数,只能是数字类型,输出字符串类型会出错。
   %e,%E    以科学计数法输出10进制的浮点数,大小写的“e”反应在显示时科学计数法的“e/E”上,只能是数字类型。
   %a       Python3.0开始支持此写法,原样输出结果,字符串类型会加上单引号引起来。
   %o       (字母o)以8进制整数方式输出,只能是数字类型;浮点类型的数字将被取整(直接删除小数部分)。
   %x,%X    将数字以16进制方式输出,只能是数字类型;浮点类型的数字将被取整(直接删除小数部分)。
   %c       以字符方式输出,提供的类型必须是 char 或 int 。
   %s       直接输出字符串(可输出任何类型)
   %r       将字符串格式化输出(可输出任何类型,会自动用 repr 转换,输出;类似于 %s)
   注: 布尔类型的 True 或 False,用数字类型输出是 1或0,字符串输出是 True 或 False。


字符串 格式化
    格式化的符号用法参考上面的“字符串格式化控制表”

    1. %s 形式(简单占位符)
       使用“%控制符”可以格式化字符串,非常方便。
       如: str1 = "Swaroop‘s age is %d, weight is %f" % (5, 65.5)

    2. %(name)s 形式(名称传参)
       “%(name)控制符”可按名称传参数(不写名称是按位置传参数)
       如: str = "%(row)d Rows is %(value)s" % { value: kkkk, row: 22 }

    3. %n.mf 形式(制定输出长度的数值,补空格)
       如: %6.2f % 1.235 # 结果为: ‘  1.24‘
       在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。
       常用用法如(只保留多少位小数,如两位小数): u%.2f元 % 567.123

    4. %0n.mf 形式(制定输出长度的数值,并指定占位符)
       如:%06.2f % 1.235 # 结果为: ‘001.24‘
       在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。
       这一行的输出为001.24,可以看到小数点也占用一位。
       类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。
       如:%-6.2f % 1.235 # 结果为: ‘1.24  ‘
       如:%+6.2f % 1.235 # 结果为: ‘ +1.24‘

    5. %ns 形式(制定输出长度的字符串,补空格)
       %ns:如果字符串变量s不足n位的话,会先输出若干个空格后再输出str1
       如:%8s:%6.1f %(newsim, 9.51) # 结果为:‘  newsim:   9.5‘
       如:%(name)8s:%(score)06.1f %{score:9.51, name:newsim} # 结果为:‘  newsim:0009.5‘

    6. %-ns 形式(制定输出长度的字符串,后面补空格)
       %-ns:与上述相反,先输出变量s,不足的然后用空格在后面补齐
       如:%-8s:%-6.1f %(newsim, 9.51) # 结果为:‘newsim  :9.5   ‘
       如:%(name)-8s:%(score)06.1f %{score:9.51, name:newsim} # 结果为:‘newsim  :0009.5‘

    7. %*.*f 形式
       有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。
       可以用%*.*f的形式,当然在后面的“要输出的值组中”包含那两个*的值。
       比如:%*.*f % (6, 2, 2.345) 就相当于%6.2f % 2.345。
       不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个"+"来构造类似的输出字符串。
       如:%*.*f % (6, 2, 2.345) # 结果为:‘  2.35‘
       如:%*s % (6, 2.345) # 结果为: ‘ 2.345‘
       如:%*s,%*.*f % (8, newsim, 6, 2, 2.345) # 结果为:‘  newsim,  2.35‘
       如:%*s,%0*.*f % (8, newsim, 6, 2, 2.345) # 结果为:‘  newsim,002.35‘
       如:%-*s,%++*.*f % (8, newsim, 6, 2, 2.345) # 结果为:‘newsim  , +2.35‘

    8. {number} 形式(按位占位符)
       {name} 形式(按名称传参)
       string.format()函数也可以格式化字符串,且有“按位”、“按名称”两种形式,还可以两种形式混用

       如: subtracting {0}, adding {1}.format(1, haha) # 参数将对应到“{number}”的位置上,结果为:subtracting 1, adding haha
       如: "foo{1}{0}-{1}".format("bar", 6) # 结果为:foo6bar-6
       如:Hi,{name},{message}.format(name = Tom,message = How old are you?) # 参数不止数字,也可以是名称,结果为:Hi,Tom,How old are you?

       如:"-{arg!r}-".format(arg=test) # 参数也以指定格式,相当于“"-%(arg)r-"%{‘arg‘:‘test‘}”,结果为:-‘test‘-
       如:"{{,}},-{0}-".format(test) # 两个“{”或者“}”表示大括号,结果为:{,},-test-
       如:{0},I\‘m {1},{message}.format(Hello,Hongten,message = How are you!) # 混合使用‘{0}‘,‘{name}‘也可以,结果为:Hello,I‘m Hongten,How are you!

       # 格式控制,数值
        import math
        print(PI is {0}..format(math.pi)) # PI is 3.14159265359.
        print(PI is {0!r}..format(math.pi)) # PI is 3.1415926535897931.
        print(PI is {0:.3f}..format(math.pi)) # PI is 3.142.
        print("PI is ‘{0:6.2f}‘.".format(math.pi)) # PI is ‘  3.14‘.
        print("PI is ‘{0:+6.2f}‘.".format(math.pi)) # PI is ‘ +3.14‘.
        print("PI is ‘{0:-6.2f}‘.".format(math.pi)) # PI is ‘  3.14‘.
        import datetime
        print("{0:now is: %Y-%m-%d %H:%M:%S}".format(datetime.datetime(2005, 2, 16, 23, 33,56))) # now is: 2005-02-16 23:33:56
        print("now is {0:%Y-%m-%d %H:%M:%S}".format(datetime.datetime(2005, 2, 16, 23, 33,56))) # now is 2005-02-16 23:33:56

       # 字典参数的输出
        table = {Sjoerd: 4127, Jack: 4098, Dcab: 7678}
        print(Jack:{0[Jack]}; Sjoerd:{0[Sjoerd]:10d}; Dcab:{0[Dcab]!r}.format(table)) # Jack:4098; Sjoerd:      4127; Dcab:7678
        for name, phone in table.items():
            print("{0:10}" ==> "{1:10d}".format(name, phone))
            # "Dcab      " ==> "      7678"
            # "Jack      " ==> "      4098"
            # "Sjoerd    " ==> "      4127"



字符串转换成数字
    float(str)     转换成浮点数,如, float("1e-1") 结果: 0.1
    int(str)       转换成整数,如, int("12") 结果: 12
    int(str,base)  转换成base进制的整数,如, int("11",2) 转换成2进制的整数,结果: 3
    long(str)      转换成长整数,Python3取消此语法,如, long("12L") 结果: 12L
    long(str,base) 转换成base进制的长整数,Python3取消此语法,如, long("11L",2) 结果: 3L


字符串用例
    name = Swaroop # This is a string object

    # 检查字符串的开头部分
    if name.startswith(Swa):  # 类似函数如 endswith()
        print(Yes, the string starts with "Swa")

    # 检查是否包含有此内容
    if a in name:
        print(Yes, it contains the string "a")

    # 找出给定字符串的位置,找不到则返回-1
    if name.find(war) != -1:
        print(Yes, it contains the string "war", s)

    # join()函数把列表拼接起来
    delimiter = ; 
    mylist = [Brazil, Russia, India, China]
    print(delimiter.join(mylist)) # 打印: Brazil; Russia; India; China

    # 大小写转换
    print("THIS IS TEST".lower())    # 转换成小写,打印: this is test
    print("this is test".upper())    # 转换成大写,打印: THIS IS TEST
    print("This Is Test".swapcase()) # 大小写互换,打印: tHIS iS tEST

    print("  This Is Test  ".strip()) # 去掉前后空格,打印: This Is Test

    # 格式化时 %r 与 %s 的区别
    s = ‘‘‘
     哈哈, /,ss
    ‘‘‘
    print(%r % s) # 打印:‘\n \xe5\x93\x88\xe5\x93\x88, /,ss\n‘
    print(%s % s) # 原样打印,包括换行


常用 string 函数
    下面所有范例,使用 s = python String function

  1.字符串长度获取: len(str)
    例: print %s length=%d % (s,len(s)) # 打印: python String function length=22

  2.字母处理
    全部大写: str.upper()
    全部小写: str.lower()
    大小写互换: str.swapcase()
    首字母大写,其余小写: str.capitalize()
    首字母大写(每个词都这样): str.title()

    print %s lower=%s % (s,s.lower()) # 打印: python String function lower=python string function
    print %s upper=%s % (s,s.upper()) # 打印: python String function upper=PYTHON STRING FUNCTION
    print %s swapcase=%s % (s,s.swapcase()) # 打印: python String function swapcase=PYTHON sTRING FUNCTION
    print %s capitalize=%s % (s,s.capitalize()) # 打印: python String function capitalize=Python string function
    print %s title=%s % (s,s.title()) # 打印: python String function title=Python String Function
    import string; print string.capitalize(s) # 打印: Python string function


  3.格式化相关
    获取固定长度,右对齐,左边不够用空格补齐: str.ljust(width)
    获取固定长度,左对齐,右边不够用空格补齐: str.ljust(width)
    获取固定长度,中间对齐,两边不够用空格补齐: str.ljust(width)
    获取固定长度,右对齐,左边不足用0补齐

    print %s ljust="%s" % (s,s.ljust(40)) # 打印: python String function ljust="python String function                  "
    print %s rjust="%s" % (s,s.rjust(40)) # 打印: python String function rjust="                  python String function"
    print %s center="%s" % (s,s.center(40)) # 打印: python String function center="         python String function         "
    print %s zfill="%s" % (s,s.zfill(40)) # 打印: python String function zfill="000000000000000000python String function"
    import string; print string.zfill(s, 40) # 打印: 000000000000000000python String function


  4.字符串搜索相关
    搜索指定字符串,没有返回-1: str.find(t)
    指定起始位置搜索: str.find(t,start)
    指定起始及结束位置搜索: str.find(t,start,end)
    从右边开始查找: str.rfind(t)
    搜索到多少个指定字符串: str.count(t)
    上面所有方法都可用 index 代替,不同的是使用 index 查找不到会抛异常,而 find 返回-1

    print %s find nono=%d % (s,s.find(nono)) # 打印: python String function find nono=-1
    print %s find t=%d % (s,s.find(t)) # 打印: python String function find t=2
    print %s find t from %d=%d % (s,3,s.find(t,3)) # 打印: python String function find t from 3=8
    print %s find t from %d to %d=%d % (s,1,2,s.find(t,1,2)) # 打印: python String function find t from 1 to 2=-1
    #print ‘%s index nono ‘ % (s,s.index(‘nono‘,1,2))
    print %s rfind t=%d % (s,s.rfind(t)) # 打印: python String function rfind t=18
    print %s count t=%d % (s,s.count(t)) # 打印: python String function count t=3
    print s.index(on) # 打印: 4
    import string; print string.find(s, t) # 打印: 2


  5.字符串替换相关
    替换old为new: str.replace(old,new)
    替换指定次数的old为new: str.replace(old,new,maxReplaceTimes)
    另一种写法: import string; string.replace(str,"old","new")

    print %s replace t to *=%s % (s,s.replace(t, *)) # 打印: python String function replace t to *=py*hon S*ring func*ion
    print %s replace t to *=%s % (s,s.replace(t, *,1)) # 打印: python String function replace t to * once=py*hon String function
    import string; print %s replace t to *=%s % (s, string.replace(s,"t","*")) # 打印: python String function replace t to *=py*hon S*ring func*ion


  6.字符串去空格及去指定字符
    去两边空格: str.strip()
    去左空格: str.lstrip()
    去右空格: str.rstrip()
    去两边字符串: str.strip(d),相应的也有 lstrip, rstrip

    s= python String function 
    print %s strip="%s" % (s,s.strip()) # 打印: python String function  strip="python String function"
    print %s strip="%s" % (s,s.strip().strip(n)) # 打印: python String function  strip="python String functio"
    print %s lstrip="%s" % (s,s.lstrip()) # 打印: python String function  lstrip="python String function "
    print %s lstrip="%s" % (s,s.strip().lstrip(py)) # 打印: python String function  lstrip="thon String function"
    import string; print %s strip="%s" % (s, string.strip(s)) # 打印: python String function  strip="python String function"


  7.按指定字符分割字符串为数组:
    str.split( )
    split(string,sep=None,maxsplit=-1)   默认按空格分隔(sep= )

    s=a b-c de-f
    print "%s" split=%s % (s,s.split()) # 打印: "a b-c de-f" split=[‘a‘, ‘b-c‘, ‘de-f‘]
    print "%s" strip=%s % (s,s.split(-)) # 打印: "a b-c de-f" strip=[‘a b‘, ‘c de‘, ‘f‘]
    import string; ip="192.168.3.3"; print(string.split(ip,.)) # 打印:  [‘192‘, ‘168‘, ‘3‘, ‘3‘]
    print("192.168.3.3".split(.,1)) # 部分分隔,打印:  [‘192‘, ‘168.3.3‘]


  8.字符串判断相关
    是否以start开头: str.startswith(start)
    是否以end结尾: str.endswith(end)
    是否全为字母或数字: str.isalnum()
    是否全字母: str.isalpha()
    是否全数字: str.isdigit()
    是否全小写: str.islower()
    是否全大写: str.isupper()

    s=python String function
    print "%s" startwith t="%s" % (s,s.startswith(t)) # 打印:"python String function" startwith t="False"
    print "%s" startwith pyt="%s" % (s,s.startswith(pyt)) # 打印:"python String function" startwith pyt="True"
    print "%s" endwith d="%s" % (s,s.endswith(d)) # 打印:"python String function" endwith d="False"
    print "%s" endwith n="%s" % (s,s.endswith(n)) # 打印:"python String function" endwith n="True"
    print "%s" isalnum="%s" % (s,s.isalnum()) # 打印:"python String function" isalnum="False"
    s=pythonStringfunction
    print "%s" isalnum="%s" % (s,s.isalnum()) # 打印:"pythonStringfunction" isalnum="True"
    print "%s" isalpha="%s" % (s,s.isalpha()) # 打印:"pythonStringfunction" isalpha="True"
    print "%s" isupper="%s" % (s,s.isupper()) # 打印:"pythonStringfunction" isupper="False"
    print "%s" islower="%s" % (s,s.islower()) # 打印:"pythonStringfunction" islower="False"
    print "%s" isdigit="%s" % (s,s.isdigit()) # 打印:"pythonStringfunction" isdigit="False"
    s=3423
    print "%s" isdigit="%s" % (s,s.isdigit()) # 打印:"3423" isdigit="True"



str, unicode 对象的 encode 和 decode 方法
    python2 中的 str 对象其实就是"8-bit string" ,字节字符串,本质上类似java中的 byte[]。
    而 python2 中的 unicode 对象应该才是等同于java中的 String 对象,或本质上是java的 char[]。

    str.decode 方法和 unicode.encode 方法是最常用的,
    简单说来就是,python内部表示字符串用 unicode(其实python内部的表示和真实的 unicode 是有点差别的,对我们几乎透明,可不考虑),和人交互的时候用 str 对象。
    s.decode --------> 将 s 解码成 unicode, 参数指定的是 s 本来的编码方式。这个和 unicode(s,encodename) 是一样的。
    u.encode --------> 将 unicode 编码成 str 对象,参数指定使用的编码方式。


乱码/编码 问题
    1、写的代码模块需要指定编码
       如果代码没有指定 coding, python 就默认所有的字符为 ASCII 码,
       ASCII 码只支持256个字符,ASCII码不支持中文,所以就报错。
       所以要在代码前写上“#coding:utf-8” 或 “#coding:gbk” 或 “#-*- coding:cp936 -*-”
       但通用写上“#coding:utf-8”

    2、代码前也可以写#coding:gbk
       但要保证你的代码文件的保存格式为gbk.这个在windos下会出现这样的问题。

    3、python2 内部所有编码统一为 unicode 即可解决乱码问题
       unicode 可以处理世界上所有语言的字符。
       utf-8 为 unicode 的一种实现形式,所以需要在代码前写上 #coding:utf-8

    4、编码转换
       牢记 python2 内部编码为 unicode.
       其它的编码 decode() 为 unicode, 再编码 encode() 为你指定的编码,就不会出现乱码。
       如: s = s.decode(gbk).encode(utf-8) # utf-8 也可以写成 utf8

       不知道原本是什么编码,可以这样写:
       import sys; s = s.decode(sys.stdin.encoding).encode(utf8)
       推荐的写法: s = unicode(s).encode(utf8)

    5、网页采集时
       代码指定#coding:utf-8
       如果网页的编码为gbk
       需要这样处理:
       html = html.decode(gbk).encode(utf-8)

    6、字典等key或值的汉字问题
       #coding:utf-8
       dict1 ={1:python周末培训班,2:咨询}

       print dict1
       # 这样输出的没有显示汉字,是显示汉字的其它编码

       dict2 ={1:python视频培训班,2:咨询}
       for key in dict2:
           print dict2[key]

    7、unicode 的汉字编码写到文本文件中
       需要根据文本文件的编码进行转换
       可以 encode(utf-8) 或 encode(gbk)

    8、获取 unicode 编码
        print repr(u中国) # 打印:u‘\u4e2d\u56fd‘

    总结:凡是报错信息中出现的错误包含“ASCII”,就是没有指定汉字编码的问题。
  

 

Python字符串

标签:swa   范围   item   大括号   头部   文件   oop   like   wap   

原文地址:http://www.cnblogs.com/Mjonj/p/7395597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!