• 【python】-- 字符串、字符编码与转码


    字符串

    字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

    创建字符串很简单,只要为变量分配一个值即可;访问子字符串,可以使用方括号来截取字符串:

    1 var1 = 'Hello World!'
    2 var2 = "Runoob"
    3  
    4 print ("var1[0]: ", var1[0])
    5 print ("var2[1:5]: ", var2[1:5])

    1、字符串运算符

    变量a值为字符串 "Hello",b变量值为 "Python":

    2、字符串格式化

    print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
    #我叫 小明 今年 10 岁!

    字符串格式化符号

    3、字符串内置方法:

    capitalize()
    将首字母大写
    >>> name = "qigao zhang"
    >>> name.capitalize()
    'Qigao zhang'
    #-------------------------------------------------------------
    
    count(sub,start=None,end=None)
    统计
    sub:统计的字符,start:开始位,end:结束位,start和end默认为空时,则表示全部字符中去统计
    
    >>> name = "qigao zhangz"
    #有开始和结束符
    >>> name.count("z",1,5)
    0
    #从整个字符串中统计字符
    >>> name.count("z")
    2
    
    #-----------------------------------------------------
    
    center(width,fillchar)
    
    如果width(字符宽度)小于等于(<=)字符串的长度,则返回原字符串,如果大于(>)字符串的,则用fillchar(填满字符)填满,处理结果等于width,字符串位于fillchar的中间
    
    >>> name = "qigao zhangz"
    >>> len(name)
    12
    #10小于等于字符串宽度
    >>> name.center(10,'-')
    'qigao zhangz'
    #51大于字符串长度,并且字符串位于填充字符的中间
    >>> name.center(51,'-')
    '--------------------qigao zhangz-------------------'
    >>> len(name.center(51,'-'))
    51
    
    #-----------------------------------------------------
    
    ljust(width,fillchar)
    
    如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最右边
    
    >>> name = "qigao zhang"
    >>> len(name)
    11
    #小于等于字符串的长度
    >>> name.ljust(11,'-')
    'qigao zhang'
    #大于字符串的长度
    >>> name.ljust(50,'-')
    'qigao zhang---------------------------------------'
    >>> len(name.ljust(50,'-'))
    50
     注:ljust中的l表示left的意思,表示从右向左
    
    #-----------------------------------------------------
    
    rjust(width,fillchar)
    
    如果字符串的长度大于width(字符宽度),则返回原字符串,如果小于width,则用fillchar(填满字符)填满,处理结果等于width,fillchar位于字符串的最左边
    
    >>> name = "qigao zhang"
    >>> len(name)
    11
    >>> name.rjust(11,'-')
    'qigao zhang'
    >>> name.rjust(50,'-')
    '---------------------------------------qigao zhang'
    >>> len(name.rjust(50,'-'))
    50
     注:ljust中的l表示left的意思,表示从左向右
    
    #-----------------------------------------------------
    
    编码(encode)
    
    字符串的编码和解码
    
    str = "python";
    str_utf8 = str.encode("UTF-8")
    str_gbk = str.encode("GBK")
    
    print(str)
    
    print("UTF-8 编码:", str_utf8)
    print("GBK 编码:", str_gbk)
    
    print("UTF-8 解码:", str_utf8.decode('UTF-8','strict'))
    print("GBK 解码:", str_gbk.decode('GBK','strict'))
    
    #-----------------------------------------------------
    
    endwith(suffix,start=None,end=None)
    
    判断是否已suffix结尾,是返回True,否返回Fales
    
    suffix:表示字符,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断
    
    >>> name = "qigao zhang"
    #start和end不为空
    >>> name.endswith('g',1,5)
    False
    #默认为空
    >>> name.endswith('g')
    True
    
    #-----------------------------------------------------
    
    find(sub,start=None,end=None)
    
    全文查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1
    
    sub:字符或者字符串,start:开始位,end:结束位,start和end默认为空时,则在整个字符串中查找
    
    >>> name = "qigao zhang"
    #没找到,则返回-1
    >>> name.find('zh',1,5)
    -1
    >>> name.find('q',2)
    -1
    >>> name.find('zh')
    6
    >>> name.find('zh',1,8)
    6
    
    #-----------------------------------------------------
    
    rfind(sub,start=None,end=None)
    
    从左向右查找sub中第一个字符所在整个字符串中的索引值,没有找到则返回-1
    
    >>> name = "qigao zhang"
    #找到
    >>> name.rfind('q')
    0
    #未找到
    >>> name.rfind('q',2)
    -1
    
    #-----------------------------------------------------
    
    12、format()
    
    指定方式格式化
    
    #-----------------------------------------------------
    
    format_map()
    
    数据格式,以字典形式传入
    
    >>> name = "name:{name},age:{age}"
    >>> name.format_map({'name':'zhangqigao','age':23})
    #输出结果
    'name:zhangqigao,age:23'
    
    #-----------------------------------------------------
    
    isalnum()
    
    是否是一个阿拉伯数字和字母,它包含因为英文字符+(1-9)数字,中间不能有特殊字符
    
    >>> age = '23'
    >>> age.isalnum()
    True
    #有特殊字符的
    >>> age = '2.3'
    >>> age.isalnum()
    False
    >>> age = 'ab23'
    >>> age.isalnum()
    True
    >>> age = 'ab'
    >>> age.isalnum()
    True
    
    #-----------------------------------------------------
    
    isalpha()
    
    是否是一个纯的英文字符,包含大写
    
    >>> age = 'ab'
    >>> age.isalpha()
    True
    #夹着数字
    >>> age = 'ab23'
    >>> age.isalpha()
    False
    #大写
    >>> age = 'Ab'
    >>> age.isalpha()
    True
    
    #-----------------------------------------------------
    
    isdigit()
    
    判断是否是一个整数
    
    #-----------------------------------------------------
    
    isspace()
    
    判断是否是一个空格
    
    #不是空格
    >>> age = ' age'
    >>> age.isspace()
    False
    #是空格
    >>> age = ' '
    >>> age.isspace()
    True
    
    #-----------------------------------------------------
    
    istitle()
    
     是否是一个标题(字符串中的每个单子首字母大写)
    
    #每个单词的首字母是大写
    >>> name = "Zhang Qi Gao"
    >>> name.istitle()
    True
    #每个单词的首字母是小写
    >>> name = "zhang qi gao"
    >>> name.istitle()
    False
    
    #-----------------------------------------------------
    
    isupper()
    
    是否是大写,注意字符串必须全部是大写才会返回True,否则返回False
    
    #全部大写
    >>> name="ZHANG"
    >>> name.isupper()
    True
    #小写
    >>> name="Zhang"
    >>> name.isupper()
    False
    
    #-----------------------------------------------------
    
    join()
    
    序列用某个字符拼接成一个字符串,注意的是,序列的元素必须是str类型
    
    
    >>> a = ['1','2','3']
    >>> '+'.join(a)
    '1+2+3'
    
    #-----------------------------------------------------
    
    lower()
    
    字符串中的大写字母转换为小写字母
    
    
    >>> name = "ZhangQiGao"
    >>> name.lower()
    'zhangqigao'
    
    #-----------------------------------------------------
    
    upper()
    
    字符串中的小写字母转换为大写字母
    
    
    >>> name = "ZhangQiGao"
    >>> name.upper()
    'ZHANGQIGAO'
    
    #-----------------------------------------------------
    
    strip()
    
    去掉左右两边的空格(space)和回车(
    )
    
    >>> name = "   
     zhangqigao    
    "
    >>> name.strip()
    'zhangqigao'
    
    #-----------------------------------------------------
    
    lstrip()
    
    删掉左边到右的空格(space)和回车(
    )
    
    >>> name = "   
     zhangqigao    
    "
    >>> name.lstrip()
    'zhangqigao    
    '
    
    #-----------------------------------------------------
    
    rstrip()
    
    删掉右边到左边的空格(space)和回车(
    )
    
    
    >>> name = "   
     zhangqigao    
    "
    >>> name.rstrip()
    '   
     zhangqigao'
    至此,方法前有l(left)和r(right)的函数,都是对之前函数的一个扩展,带l的表示至始至终从右到左操作,记住左边才是最终目的地,而带r的至始至终都是从左到右,因为右边才是它的终极目标
    
    #-----------------------------------------------------
    
    split()
    
    分割函数,默认是以空格分割(space)生成一个列表,如果其他字符分割,输入其他字符参数
    
    >>> name = "qigao zhang"
    #默认为空,按空格分割
    >>> name.split()
    ['qigao', 'zhang']
    >>> name = "qigao+zhang"
    #以'+'字符分割
    >>> name.split("+")
    ['qigao', 'zhang']
    #以'
    '分割
    >>> name = "qigao
    zhang"
    >>> name.split("
    ")
    ['qigao', 'zhang']
    
    #-----------------------------------------------------
    
    splitlines()
    
    以换行符分割,这个一般在windows上开发,移到Linux上执行,或者在Linux上开发,移到Windows上执行,因为换行在windows上是"
    ",linux上是'
    '
    
    >>> name = "qigao
    zhang"
    >>> name.splitlines()
    ['qigao', 'zhang']
    
     #-----------------------------------------------------
    
    swapcase()
    
    把大写换成小写,把小写换成大写
    >>> name = "ZHang"
    >>> name.swapcase()
    'zhANG'
    
    #-----------------------------------------------------
    
    startswith(prefix, start=None,end=None)
    
    判断是否已prefix结尾,是返回True,否返回Fales
    
    prefix:表示字符或者字符或者字符串,start:开始位,end:结束位,start和end默认为空是,表示从整个字符串的结尾去判断
    
    >>> name = "zhang qigao"
    >>> name.startswith("zhang") #开头找到"zhang" 字符串
    True
    >>> name.startswith("h",3,5)  #在索引3到5之间没有找到以字符'h'开头
    False
    
    #-----------------------------------------------------
    
    replace(old,new[, max])
    
    old:将被替换的子字符串; new:新字符串,用于替换old子字符串;max:可选字符串, 替换不超过 max 次
    
    >>> name = "zhang is shuai ge"
    >>> name.replace('is','was')
    'zhang was shuai ge'
    #原字符串没有改变
    >>> name
    'zhang is shuai ge'
    >>> name.replace('is','was',0)
    'zhang is shuai ge'
    >>> name.replace('is','was',1)
    'zhang was shuai ge'
    
    
    #-----------------------------------------------------
    
    zfill(width)
    
    字符的长度是否大于等于(>=)with,如果比width小,则在字符串钱用0填充,如果>=width,则返回原字符串
    
    >>> name = "zhangqigao"
    >>> len(name)
    10
    #width大于字符串长度
    >>> name.zfill(11)
    '0zhangqigao'
    #width小于等于字符串长度
    >>> name.zfill(10)
    'zhangqigao'
    View Code

    format()

    字符串的函数 str.format(),它增强了字符串格式化的功能。

    基本语法是通过 {} 和 : 来代替以前的 % 。

    format 函数可以接受不限个参数,位置可以不按顺序。

    >>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
    'hello world'
     
    >>> "{0} {1}".format("hello", "world")  # 设置指定位置
    'hello world'
     
    >>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
    'world hello world'

    也可以设置参数:

     
    print("网站名:{name}, 地址 {url}".format(name="QQ", url="www.QQ.com"))
     
    # 通过字典设置参数
    site = {"name": "QQ", "url": "www.QQ.com"}
    print("网站名:{name}, 地址 {url}".format(**site))
     
    # 通过列表索引设置参数
    my_list = ['QQ', 'www.QQ.com']
    print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是可选的

    数字格式化:

     str.format() 格式化数字的多种方法

    >>> print("{:.2f}".format(3.1415926));
    3.14

    字符编码与转码

    总结:

    1.在python2默认编码是ASCII, python3里默认是unicode

    2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

    3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

    详细文章:

    http://www.cnblogs.com/yuanchenqi/articles/5956943.html

  • 相关阅读:
    String的equals和hashCode方法
    查看oracle中表的索引
    初识RESTful
    linux安装字体库(simSun为例)
    排序之快排(JS)
    面向对象的三个基本特征 和 五种设计原则
    排序之希尔排序(JS)
    关于正则表达式
    Oracle 表分区介绍与使用
    一个复杂关联的sql
  • 原文地址:https://www.cnblogs.com/Keep-Ambition/p/7190891.html
Copyright © 2020-2023  润新知