#Python中的字符串处理——2009-12-5
1.字符串的对齐方式:
①:center(int[,str])
>>> string = 'Fishhat'
>>> string.center(55)
'
>>> string.center(55,'*')
'************************Fishhat************************'
②:ljust(int[,str])
>>> string.ljust(55)
'Fishhat
>>> string.ljust(55,'*')
'Fishhat************************************************'
③:rjust(int[,str])
>>> string.ljust(55)
'
>>> 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)
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)
['f','i','s-h-h-a-t']
后记:这里很容易混淆,后面的整数参数(不提供系统默认截取所有的)其实就相当于你要在字符串中画多少条界,相当于切一条蛋糕,你切两刀是不是得三块?至于每块蛋糕的长短,就取决于你在蛋糕上做好的标记,也就相当于刚才的'-'
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):
>>> ...
>>> ... return rstr
>>> ...
>>> string = 'Fishhat'
>>> list(string)
>>> ['F','i','s','h','h','a','t']
>>> print reverse(string)
tahhsiF
后记:不知道是不是Python'蓄意'跟我搞了个乌龙(汗死了~~囧!!!):
>>> def reverse(str):
>>> ... lstr = list(str)
>>> ... lstr.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
>>> print string.find('h',5,-1)
8
②rfind(substring[,start[,end]])--跟上面的没什么两样,只是在查找子字符串的时候是从字符串的尾部开始找的,下面例子很好:
>>> string = 'I am Fishhat'
>>> print string.find('h')
8
>>> print string.rfind('h')
9
#因为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')
'AAAAABBBBBCCCCC'
>>> str.replace('A','a',3)
'aaaAABBBBCCCCC'
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
>>> str = time.strftime('%Y-%m-%d %X',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)
>>> print str
2009-12-09 00:00:00
>>> type(str)
<type 'datetime.datetime'>
最后再把上面这两个函数结合起来完整的完成字符串到时间的转换:
>>> import time,datetime
>>> string = '2009-12-09'
>>> string = time.strptime(string,'%Y-%m-%d')
>>> y, m, d = string[0:3]
>>> string = datetime.datetime(y, m, d)
2009-12-09 00:00:00
str='python String function'
- 生成字符串变量str='python String function'
- 字符串长度获取:len(str)
例:print '%s length=%d' % (str,len(str))
- 字母处理
全部大写:str.upper()
全部小写:str.lower()
大小写互换:str.swapcase()
首字母大写,其余小写:str.capitalize()
首字母大写:str.title()
print '%s lower=%s' % (str,str.lower())
print '%s upper=%s' % (str,str.upper())
print '%s swapcase=%s' % (str,str.swapcase())
print '%s capitalize=%s' % (str,str.capitalize())
print '%s title=%s' % (str,str.title()) -
格式化相关
获取固定长度,右对齐,左边不够用空格补齐:str.ljust(width)
获取固定长度,左对齐,右边不够用空格补齐:str.ljust(width)
获取固定长度,中间对齐,两边不够用空格补齐:str.ljust(width)
获取固定长度,右对齐,左边不足用0补齐
print '%s ljust=%s' % (str,str.ljust(20))
print '%s rjust=%s' % (str,str.rjust(20))
print '%s center=%s' % (str,str.center(20))
print '%s zfill=%s' % (str,str.zfill(20)) -
字符串搜索相关
搜索指定字符串,没有返回-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' % (str,str.find('nono'))
print '%s find t=%d' % (str,str.find('t'))
print '%s find t from %d=%d' % (str,1,str.find('t',1))
print '%s find t from %d to %d=%d' % (str,1,2,str.find('t',1,2))
#print '%s index nono ' % (str,str.index('nono',1,2))
print '%s rfind t=%d' % (str,str.rfind('t'))
print '%s count t=%d' % (str,str.count('t')) -
字符串替换相关
替换old为new:str.replace('old','new')
替换指定次数的old为new:str.replace('old','new',maxReplaceTimes)
print '%s replace t to *=%s' % (str,str.replace('t', '*'))
print '%s replace t to *=%s' % (str,str.replace('t', '*',1)) -
字符串去空格及去指定字符
去两边空格:str.strip()
去左空格:str.lstrip()
去右空格:str.rstrip()
去两边字符串:str.strip('d'),相应的也有lstrip,rstrip
str=' python String function '
print '%s strip=%s' % (str,str.strip())
str='python String function'
print '%s strip=%s' % (str,str.strip('d')) -
按指定字符分割字符串为数组:str.split(' ')
默认按空格分隔
str='a b c de'
print '%s strip=%s' % (str,str.split())
str='a-b-c-de'
print '%s strip=%s' % (str,str.split('-')) -
字符串判断相关
是否以start开头:str.startswith('start')
是否以end结尾:str.endswith('end')
是否全为字母或数字:str.isalnum()
是否全字母:str.isalpha()
是否全数字:str.isdigit()
是否全小写:str.islower()
是否全大写:str.isupper()
str='python String function'
print '%s startwith t=%s' % (str,str.startswith('t'))
print '%s endwith d=%s' % (str,str.endswith('d'))
print '%s isalnum=%s' % (str,str.isalnum())
str='pythonStringfunction'
print '%s isalnum=%s' % (str,str.isalnum())
print '%s isalpha=%s' % (str,str.isalpha())
print '%s isupper=%s' % (str,str.isupper())
print '%s islower=%s' % (str,str.islower())
print '%s isdigit=%s' % (str,str.isdigit())
str='3423'
print '%s isdigit=%s' % (str,str.isdigit())
Python笔记——字符串处理
1.定义
A.字符串
Python字符串:一个有序的字符集合,用来存储和表现基于文本的信息
用于表示和存储文本,是单个字符的序列, 符合序列操作
python中字符串是不可变的,一旦声明,不能改变
通常由单引号(' ),双引号(" ),三引号('''
三引号,多行字符串块,编写多行文本的快捷语法,常用语文档字符串,在文件的特定地点,被当做注释。便捷的多行注释。
B.原始字符串(raw string)
原始字符串常量,r”abcd”,即去掉了反斜线转义机制。关闭转义机制,常见于正则表达式
特殊字符串,以大写R 或小写r开始,为正则表达式设计的,其中\不再表示转义
【用于处理正则表达式,减少反斜杠】
path = r'e:\book'
可以方便地表示系统路径
C.转义符
\n换行,\\反斜杠
\t制表
\r回车 \"双引号
D.特性
不可变性:在创建之后就不能就地改变(同java),不能通过对其某一位置进行赋值而改变字符
划分为不可变序列,这些字符串所包含的字符存在从左到右的顺序,不可在原处修改。
python中字符串相当于一个不可变序列的列表,一旦声明,每个字符位置固定
>>>s=’spam’
>>>s[0]=’k’
修改字符串类似java,重新赋值
s = ‘k’ + s[1:]
2.基本操作:
A.base op
长度len(s)
连接‘s ’ + ‘pam’
重复: ‘HI’*4
Python不允许在+表达式中出现其他类型,需要手工转【这点不同于java】
‘abc’+str(9)
B.字符串转换:
int(‘42’)
str(42)
float(’42.0’)
字符串与数字相互转换
string.atoi(s[,base]) 字符串-》数字
s:进行转换的字符串
base:可选,目标进制
str() 数字-》字符串
str(4)
ord(‘s’) #转ASCII
chr(115) #转字符
字符串和列表的转换
s=’spam’
l = list(s)
k = ‘’.join(l)
C. 修改字符串:
s =
s = s[3:] + ‘b’
s = s.replace(‘pl’,’pa’)
D. 索引和分片
正序获取:str[0]
倒序获取:str[-i] 其中最后一个字符序号为-1
str[a:b] a到b-1区间内的字符串
str[0:-2]与str[:-2]一样
索引s[i]
分片s[i:j]
3.字符串内建函数
【字符串方法是python文本处理头号工具】
string.capitalize() | 字符串第一个字符大写 |
string.center(width,[,fill]) | 原字符居中,空格填充至width长度 |
string.count(str,beg=0,end=len(string)) | 获得字符串中某一个子串的数目,计算出现次数,可指定范围 |
string.decode(encoding=’UTF-8’,errors=’strict’) | 解码字符串,出错默认报ValueError,除非errors是ignore或replace |
string.encode(encoding=’UTF-8’,errors=’strict’) | |
string.endswith(suffix,beg=0,end=len(string)) | 是否以**结尾 |
string.expandtabs(tabsize=8) | 把字符串中tab转为空格,默认8个 |
string.find(str,beg=0,end=len(stirng)) | 检测是否包含str,存在返回开始索引,否则返回-1 |
string.index(str,begin=0,end=len(string)) | 同find,不存在报异常 |
string.isalnum() | 至少一个字符,且所有字符均为字母或数字,True. 检测字符串是否只包含0-9A-Za-z |
string.isalpha() | 至少一个字符,所有字符都是字母,True. 检测字符串是否只包含字母 |
string.isdecimal() | 只包含十进制数,True |
stirng.isdigit() | 只包含数字,True. 检测字符串是否仅包含数字 |
string.islower() | 至少一个区分大小写字符且所有字符小写,True. 检测字符串是否均为小写字母 |
string.isnumeric() | 只含数字字符,True |
string.isspace() | 只包含空格,True. 检测字符串是否均为空白字符 |
string.istitle() | 标题化字符,True. 检测字符串中的单词是否为首字母大写 |
string.isupper() | 至少一个区分大小写字符且所有字符大写,True. 检测字符串是否均为大写字母 |
string.join(seq) | 以string作为分隔符,seq中所有元素合并为新的字符串. 将原字符串插入参数字符串中的每两个字符之间 |
string.ljust(width) | 返回一个原字符串左对齐,空格补充至长度width |
string.lower() | 转小写. 将字符串全部转为小写 |
string.lstrip() | 截掉左侧的空格 |
string.partition(str) | = find+split,从str出现第一个位置,截断为pre_str,str,after_str元组,不含str则pre_str=str |
string.replace(str1,str2,num=string.count(str1)) | 替换,指定不超过num次,可作为模板实现 |
string.rfind(str,beg=0,end=len(string)) | 同find,右边开始 |
string.rindex(str,beg=0,end=len(string)) | 同index,右边开始 |
string.rjust(width) | 右对齐,空格补齐 |
string.rpartition(str) | 同partition,右边开始 |
string.rstrip([chars]) | 清理右侧空白,包括换行符,返回处理后字符串 |
string.split(str=””, maxsplit =string.count(str)) | 以str切片,可指定分割次数, 分割字符串,返回列表,默认分隔符空格 |
string.splitlines(num=string.count(‘\n’)) s.splitlines([keepends]) | 按行分隔,可指定分割次数 |
string.startswith(obj,beg=0,end=len(string)) | 以str开头,True. 检测字符串是否以某一子串开头 |
string.strip([obj]) | 在string上执行lstrip和rstrip |
string.swapcase | 反转string中大小写. 字符串中小写转大写,大写转小写 |
string.title() | 标题花,单词首字母大写,其余小写 |
string.translate(str,del=””) s.translate(table) | 根据str给出表转换string字符,要过滤的字符放在del参数中 |
string.upper() | 转大写. 将字符串全部转为大写 |
string.zfill(width) | 返回长度width的字符串,原字符串右对齐,前面填充0 |
len(string) | 获取字符串的长度 |
4.格式化输出字符串
%c 单个字符
%d 十进制整数
%o 八进制整数
%s 字符串
%x 十六进制整数,其中字母小写
%X 十六进制整数,其中字母大写
str = "so %s a day!"
str % 'beautiful'
“%s,a,b” %”TOM” 格式化
‘{0}
%[(name)][flags][width][,precision]typecode
-左对齐
%-6d六位左对齐
d六位补零
基于字典的格式化
“%(n)d %(x)x” % {“n”:1 , “x”:spam}
python2.6之后格式化新方法:
可以通过位置或关键字进行填充
template = “{0}, {1}
template.format(‘spam’,’ham’,’eggs’)
template = “{motto},{pork} and food”
template.format (motto=”a”,port = ‘ham’,food=’eggs’)
template = “{motto}, {0} and {food}”
template.format(‘ham’,motto=”a”,food=”b”)
存在其他更强大的用法,参见p198
格式化字符串:
pattern = “%s -----%s”
c = parttern %(a,b) #格式化后总返回新的字符串
5.字符串相关模块:
string 字符串相关类和函数,例如Template re正则表达式模块 struct字符串和二进制转换 c/StringIO字符串缓冲对象,操作方法类似file base64 Base16,32,64数据编解码 codecs解码器注册和基类 crypt进行单方面加密 difflib找出序列不同 hashlib多种不同安全哈希算法和信息摘要算法的API hma HMAC信息鉴权算法python实现 md5 RSA的MD5信息摘要鉴权 rotor提供多平台加密解密服务 sha NIAT的安全哈希算法SHA stringprep提供用于IP协议的Unicode字符串 textwrap 文本包装和填充 unicodedata Unicode数据库 |
6.其他
A.获得帮助
>>>help(str)
>>> dir(str)
>>> help(str.replace)
大家还是直接看代码比较直接,以下是代码及其运行结果:
- #string.py
字符串操作函数 - #字符串声明方式
- stra
= 'a python string' - strb
= "b python /n string" #带转义的 - strc
= '''''two lines python string''' - strd
= """two lines python string""" - print(stra)
- print(strb)
- print(strc)
- print(strd)
- #字符串相当于一个不可变序列列表
- #正序获取
- print(
stra[0:6] ) #序号0-5 - #倒序获取
str[-i] 最后一个字符序号为 -1 - print(
stra[-6:-1] ) #序号-6 到 -2 - print('-------string
operations --------') - #获取字符串长度
- print(
len(stra) ) - #首字母大写
- print(
stra.capitalize() ) - #计算子串出现次数
- print(
stra.count('python') ) - #获得某一子串的起始位置
- print(
stra.find('python') ) - #将字符串全部小写
- print(
stra.lower() ) - #将字符串全部大写
- print(
stra.upper() ) - #将字符串中小写转大写,大写转小写
- print(
stra.swapcase() ) - #将字符串中所有单词首字母大写
- print(
stra.title() ) - #将原字符串插入到参数字符串红的每两个字符之间
- print(
stra.join('*#!') ) - #切分字符串,若不指定分隔符,默认空格
- print(
stra.split() ) - #检测是否只包含0-9A-Za-z
- print(
stra.isalnum() ) - #检测是否只包含字母
- print(
stra.isalpha() ) - #检测是否只包含数字
- print(
stra.isdigit() ) - #检测字符串是否均为小写
- print(
stra.islower() ) - #检测字符串是否均为大写
- print(
stra.isupper() ) - #检测字符串是否均为空白
- print(
stra.isspace() ) - #检测字符串中的单词是否全部为首字母大写
- print(
stra.istitle() ) - #检测是否以某一字符串开头
- print(
stra.startswith('a') ) - #检测字符串是否以某一字符串结尾
- print(
stra.endswith('b') ) - #格式化输出字符串
- str
= "so %s a day!" - print(
str % 'beautiful' )
结果