zoukankan      html  css  js  c++  java
  • python 字符串处理

    转载至:http://hi.baidu.com/fishhatta/blog/item/458ac900d4a64f054bfb51f4.html

    #Python中的字符串处理——2009-12-5

    1.字符串的对齐方式:
    ①:center(int[,str])
    >>> string = 'Fishhat'
    >>> string.center(55)
    '                              Fishhat                              '
    >>> string.center(55,'*')
    '************************Fishhat************************'

    ②:ljust(int[,str])
    >>> string.ljust(55)
    'Fishhat                                                            '
    >>> string.ljust(55,'*')
    'Fishhat************************************************'

    ③:rjust(int[,str])
    >>> string.ljust(55)
    '                                                            Fishhat'
    >>> string.ljust(55,'*')
    '************************************************Fishhat'

    ④:%(int)s
    >>> print '% 55s' % string
    Fishhat


    2.字符串中的转义字符:
    \\    斜杠
    \'    单引号
    \"    双引号
    \a    系统喇叭
    \b    退格符
    \n    换行符
    \t    横向制表符
    \v    纵向制表符
    \r    回车符
    \f    换页符
    \o    八进制数代表的字符    #还搞不懂...
    \x    十六进制数代表的字符   #还搞不懂...
    \000 终止符,忽略\000后的全部字符

    3.字符串中的转义符过滤函数:
    ①:strip()--过滤字符串中所有的转义符
    ②:lstrip()--过滤字符串中第一个转义符
    ③:rstrip()--过滤字符串中最后的转义符
    后记:在使用的时候返回的结果不是预想中的正确结果.还待查询相关具体资料

    4.字符串的连接
    ①:Python中可以使用'+'、'+='、连接若干个字符串,如果是以下情况,Python则自动连接:
    >>> str = 'fish' 'hat' #若干个字符串之间如果只有空格,Python会自动连接
    >>> print str
    fishhat
    >>> str += ' learning Python!' #使用运算符追加字符串
    >>> print str
    fishhat learning Python

    ②:使用str2.join(str)函数进行连接,其中str为需要连接的字符串序列或者一个字符串,str2为连接中填补的字符:
    >>> string = ('apple','banana','china')
    >>> print '-'.join(string)      #向string这个元组中的多个字符串元素之间加上'-'然后输出
    apple-banana-china 
    >>> print ''.join(string)      #加入的字符也可以是空的
    applebananachina
    >>> print '-'.join('fishhat')   #直接使用
    f-i-s-h-h-a-t                     #自动在每个子字符中加入'-'

    5.用split(str[,int])函数截取字符串
    >>> string = 'f-i-s-h-h-a-t'
    >>> string.split('-')           #按'-'作为截取子字符串的符号,也就是说遇到一个'-'则截取一个子字符
    ['f','i','s','h','h','a','t']           #最后返回一个截取得到的子字符列表
    >>> string.split('-',2)         #在按'-'截取子字符的时候,当截取到第2个'-'的时候就停止截取,后面的字符全部按一个子字符返回(也就是说不管有没有'-'Python都不会理 了,它认为你只指定了2个'-'有效)
    ['f','i','s-h-h-a-t']              #实际上返回了三个子字符,因为在Python找到第一个'-'之前已经有一个'f'就把'f'做子字符


    后记:这里很容易混淆,后面的整数参数(不提供系统默认截取所有的)其实就相当于你要在字符串中画多少条 界,相当于切一条蛋糕,你切两刀是不是得三块?至于每块蛋糕的长短,就取决于你在蛋糕上做好的标记,也就相当于刚才的'-'

    6.startswith()函数和endswith()函数
    ①:startswith(substring[,start[,end]])--用于判断字符串是否以substring字符开始的,start和 end需要对比的字符区间,默认是整个字符串,成功返回True失败返回False
    >>> str = 'fishhat'
    >>> str.startswith('fi')
    True
    >>> str.startswith('sh',2,4)
    True
    >>> str.startswith('sh',)

    ②:endswith(substring[,start[,end]])--用于判断字符串是否以substring字符结束的,start和end是 需要对比的字符区间,默认是整个字符串,成功返回True失败返回False
    >>> str.endswith('hat')
    True
    >>> str.endswith('ha',4,6)
    True

    #Python中的字符串处理(2)——2009-12-8
    前记:前两天的笔记没有坚持写.现在继续.COME ON!今后争取每天都要写一篇笔记(就算没有东西写了也要扯出来)

    1.实现字符串的反转,由于Python目前没有专门用于字符串反转的函数所以自定义一个,实现方法是通过从字符串的尾部开始取得子字符,然后逐个 连接起来后返回一个完整的反转字符串:

    >>> def reverse(str):
    >>> ... rstr = ''               #定义一个用于连接字符串后返回的变量
    >>> ... lstr = list(str)      #将字符串分解成一个列表,即一个子字符为列表的一个元素
    >>> ... for i in range(len(str),0,-1):    #反向遍历索引,起始值为字符串的长度(就是以尾部到首部的顺序生成索引)
    >>> ...      rstr += ''.join(lstr[i-1])        #注意这里的索引得减去1,否则原字符串的第一个字符就不能返回(因为是0)
    >>> ... return rstr                              #返回经过反向遍历字符串重新连接起来的反向字符串 
    >>> ...
    >>> string = 'Fishhat'

    >>> list(string)                         #这里先补上刚才接触到list()函数的用法与功能
    >>> ['F','i','s','h','h','a','t']          #返回一个子字符集合的列表
    >>> print reverse(string)       #试试刚才自定义的字符串反转函数怎么样
    tahhsiF                                  #好样的,我们成功的把字符反过来了

    后记:不知道是不是Python'蓄意'跟我搞了个乌龙(汗死了~~囧!!!):

    >>> def reverse(str):          #这个函数比上面那个精简了一些
    >>> ... lstr = list(str)          #解包--把字符串分解成子字符组成的列表
    >>> ... lstr.reverse()           #使用列表的reverse()方法对列表内的元素倒序排列
    >>> ... rstr = ''.join(lstr)      #打包--把列表内的子字符重新连接起来
    >>> ... return rstr               #返回连接后的结果
    >>> string = 'ABCDE'
    >>> print reverse(string)
    EDCBA
        

    让我更囧的东西还在下面....Python这小子竟然再次耍我:

    >>> def reverse(str):          #比上面的都精简.看到这里我就无语了~~
    >>> ... return str[::-1]          #直接返回通过索引倒序排序的结果
    >>> ...
    >>> string = 'ABCDE'
    >>> print reverse(string)
    EDCBA

    2.字符串的查找与替换--可以用两个函数实现:find()、rfind(),这两个函数的不同之处只是查找的顺序不同
    ①find(substring[,start[,end]])--在字符串中查找子字符substring,后面的两个可选参数是进行切片查找
    如果在字符串中找到substring则返回索引(如果字符串中有多个结果则返回第一次出现的索引),没找到返回-1


    >>> string = 'I am Fishhat'
    >>> print string.find('F')
              #记住.在查找的时候是区分大小写的
    5
    >>> print string.find('f')            #试试看小写
    -1                                           #找不到,所以是区分大小写的
    >>> print string.find('h',2,5) 
    -1                                          #索引2至5之间没找到'h'
    >>> print string.find('h',5,-1)   # 索引5到字符串的最后一个索引
    8                                            #找到了,在第8个索引

    ②rfind(substring[,start[,end]])--跟上面的没什么两样,只是在查找子字符串的时候是从字符串的尾部开始找的,下 面例子很好:


    >>> string = 'I am Fishhat'
    >>> print string.find('h')
           #先看看find()方法的结果
    8                                         #找到了,在第八个索引
    >>> print string.rfind('h')      #然后试试rfind()方法看看跟上面有什么不一样的
    9                                            #注意到了没?'I am Fishhat'中是不是有两个'h'呢?
    #因为find()从左至右(顺序)开始查找的,找到的第一个'h'是在第8个索引,索引find()就返回咯
    #而rfind()不一样,它是从右至左(倒序)进行查找的,找到的第一个'h'是在第9个索引.那就返回倒序查找先发现的咯,当然是9了

    1.替换字符串--replace(old,new[,max]):替换字符串中找到的old为new,如果字符串中找到了多个old字串,则可使 用max指定替换多少个old(默认是替换所有),再有的就是.如果在字符串没有找到old字串.则返回原字符串

    >>> str = 'AAAAABBBBBDDDDD'
    >>> str.replace('D','C')       #把字符串中所有的D替换为C
    'AAAAABBBBBCCCCC'
    >>> str.replace('A','a',3)
         #替换字符串中的3个A为a
    'aaaAABBBBCCCCC'               #replace()函数的操作不会影响原字符串.只是拷贝原字符串然后进行操作而已

    2.字符串与时间格式的转换

    首先看看格式化日期的时候常用到的标记
    %a 英文星期的简写
    %A 英文星期的完整拼写
    %b 英文月份的简写
    %B 英文月份的完整拼写
    %c 本地当前的日期与时间
    %d 日期数,1-31之间
    %H 小时数,00-23之间
    %I 小时数,01-12之间
    %m 月份,01-12之间
    %M 分钟数,01-59之间
    %j 本年从第1天开始计数到当天的天数
    %w 星期数,0-6之间(0是周日)
    %W 当天属于本年的第几周,周一作为一周的第一天进行计算
    %x 本地的当天日期
    %X 本地的当前时间
    %y 年份,0-99之间
    %Y 年份的完整拼写

    ①时间转为字符串--strftime(format[,tuple]),其中format为转换格式类型tuple为一个时间元组

    >>> import time          #由于获取时间和使用转换函数需用到time模块.所以必须导入
    >>> str = time.strftime('%Y-%m-%d %X',time.localtime()) #time,localtime()返回以本地时间的所有参数为元素的元组
    >>> print str
    2009-12-09 21:36:35

    ②字符串转为时间--需要用到time模块strptime()函数和datetime模块datetime()函数
    strptime(string,format)--把字符串string以format的格式返回一个时间的元组(元组内有齐全的时间元素,但是如果字 符串中只有几个有用的时间信息,其他的元素默认或取本地时间的一些信息)
    >>> str = '2009/12/09'
    >>> str = time.strptime(str,'%Y/%m/%d')
       #注意后面的获取字符串中的时间的格式.对应原字符串中年月日之间的间隔符号
    >>> print str
    time.struct_time(tm_year=2009, tm_mon=12, tm_mday=9, tm_hour=0, tm_min=0, tm_sec
    =0, tm_wday=2, tm_yday=343, tm_isdst=-1)
          #可以注意到元组中前三个元素都是刚才字符串中得到的值,后面的信息都没没获取到

    datetime(year,month,day[,hour[,minute[,second[,microsecend[,tzinfo]]]]]) 函数返回一个datetime类型的变量,这是一种特殊的变量,也就是说,时间型的

    >>> str = datetime.datetime(2009,12,9)     #定义一个datetime变量,注意后面参数中的月或日,只能单写也就是说,9月或9日不能写成09月或09日,必须单写
    >>> print str
    2009-12-09 00:00:00  
                          #但显示却会显示完整的,比如其中的9日显示为了09日,还有,默认时分秒为0
    >>> type(str)
    <type 'datetime.datetime'>
                     #这里可以看到刚才定义的str为这种类型的变量

    最后再把上面这两个函数结合起来完整的完成字符串到时间的转换:

    >>> import time,datetime                       #首先导入两个使用到的模块 
    >>> string = '2009-12-09'
    >>> string = time.strptime(string,'%Y-%m-%d')
     #首先把字符串使用strptime()返回一个时间元素构成的元组
    >>> y, m, d = string[0:3]                      #把得到的时间元组前三个元素赋值给三个变量(也就是年月日)
    >>> string = datetime.datetime(y, m, d)        #最后使用datetime把刚才得到的时间变量转为正式的时间格式变量
       >>> print string
    2009-12-09 00:00:00
                                #至此,可以说完成了字符串到时间的转换(注意是变量类型转换的过程)

  • 相关阅读:
    Atitit.eclise的ide特性abt 编译
    Atitit python3.0 3.3 3.5 3.6 新特性 Python2.7新特性1Python 3_x 新特性1python3.4新特性1python3.5新特性1值得关注的新特性1Pyth
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.eclipse 4.3 4.4  4.5 4.6新特性
    atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
    Atitit RSA非对称加密原理与解决方案
    Atitti.数字证书体系cer pfx attilax总结
    Atitit ftp原理与解决方案
    Atitit qzone qq空间博客自动点赞与评论工具的设计与实现
    Atitit 软件国际化原理与概论
  • 原文地址:https://www.cnblogs.com/mfryf/p/2347936.html
Copyright © 2011-2022 走看看