Python核心编程阅读笔记-3字符串

1.序列基础

 

1.1.标准类型操作符

标准类型操作符一般都能适用于所有的序列类型,如果作复合类型的对象比较的话,可能有所差别。

 

1.2.序列类型操作符

 

序列操作符

作用

seq[ind]

获得下标为ind的元素 ind范围 0<=ind<=len(seq)-1  -len(seq)<=ind<=-1

seq[ind1:ind2]

获得下标从ind1到ind2间的元素集合 ind范围 0<=ind<=len(seq)-1  -len(seq)<=ind<=-1

seq[::ind1]

用步长来进制扩展的切片操作

seq*expr

序列重复expr次

seq1+seq2

连接序列seq1和seq2

obj in seq

判断obj元素是否包含在seq中

obj not in seq

判断obj元素是否不包含在seq中

 

1.3.内建函数

 

函数

含义

list(iter)

把可迭代对象转换为列表,创建序列对象的浅拷贝(只拷贝对对象的索引,不是重建对象)

str(obj)

把obj对象转换成字符串(对象的字符串表示法)

unicode(obj)

把对象转换成Unicode字符串(使用默认编码)

basestring()

抽象工厂函数,其作用仅仅是为str和unicode函数提供父类,所以不能被实例化,也不能被调用

tuple(iter)

把一个可迭代对象转换成一个元组对象

enumerate(iter)

接受一个可迭代对象作为参数,返回一个enumerate对象(同时也是一个迭代器),该对象生成由iter每个元素的index值和item值组成的元组

len(seq)

返回seq的长度

max(iter,key=None)

max(arg0,arg1...key=None)

返回iter或(arg0,arg1,...)中的最大值,如果指定了key,这个key必须是一个可以传给sort

min(iter,key=None)

min(arg0,arg1...key=None)

返回iter里面的最小值或者返回(arg0,arg1,...)里面的最小值;如果指定了Key,这个ke

reversed(seq)

接受一个序列作为参数,返回一个可以逆序访问的迭代器

sorted(iter,func=None,key=None,reverse=False)

接受一个一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key和reverse的含义跟list.sort()内建函数的参数一样

sum(seq,init=0)

返回seq和可选参数init的综合,其效果等同于reduce(operator.add,seq,init)

zip([it0,it1...itN])

返回一个列表,其第一个元素是it0、it1...这些元素的第一个元素组成的一个元组,第一个...依次类推

 

2.标准类型操作符

在做比较操作符的时候,字符串时安装ASCII值得大小来比较的

 

3.序列操作符

str1+str2

这种语法是在运行时字符串连接的加法操作,是非常标准的。

foo='Hello' 'world!'

这种一种程序员的习惯用法的语法,允许你在源码中把几个字符串连接在一起写,以此来构建新字符串(同时方便添加备注)

'Hello' + u' ' +'World' + u'!'

普通字符串和一个Unicode字符串做连接处理时,Python会在连接操作前先将普通字符串转化为Unicode字符串

 

4.只适用于字符串的操作符

 

4.1.格式化操作符(%)

 

格式化字符

转换方式

%c

转换成字符(ASCII码值,或者长度为一的字符串)

%r

优先用repr()函数进行字符串转换

%s

优先用str()函数进行字符串转换

%d/%i

转成有符号十进制数

%u

转成无符号十进制数

%o

转成无符号八进制数

%x/%X

转成无符号十六进制数(x/X代表转换后的十六进制字符的大小写)

%e/%E

转成科学计数法(e/E控制输出e/E)

%f/%F

转成浮点型(小数部分自然截断)

%g/%G

%e/%E和%f/%F的简写

%%

输出%

Python支持两种格式的输入参数。第一种是元组,第二种是字典形式

 

4.2.格式化操作符辅助指令

 

符号

作用

*

定了宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号(+)

<sp>

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是x还是X)

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

(var)

映射变量(字典参数)

m.n

m是显示的最小总宽度,n是小数点后的位数(如果可用的话)

 

4.3.字符串模板

字符串模板用以代替格式化操作符,更为简单和适用。通过from string import Template 引入Template对象,其有两个方法substitute()和safe_substitute().前者更为严谨,在key缺少的情况下会报一个KeyError的异常出来,而后者在缺少key时,直接原封不动的把字符串显示出来

>>> from string import Template

>>> s=Template('There are ${howmany} ${lang} Quotion Symbols')

>>> print s.substitute(lang='Python',howmany=3)

There are 3 Python Quotion Symbols

>>> print s.substitute(lang='Python')

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

  File "/usr/lib/python2.7/string.py", line 176, in substitute

    return self.pattern.sub(convert, self.template)

  File "/usr/lib/python2.7/string.py", line 166, in convert

    val = mapping[named]

KeyError: 'howmany'

>>> print s.safe_substitute(lang='Python')

There are ${howmany} Python Quotion Symbols

>>>

 

4.4.原始字符串操作符(r/R)

关于原始字符串的目的,是为了对付那些在字符串中出现的特殊字符。在原始字符串里,所有的字符串都是直接按照字面的意思来使用,没有转义特殊或者不能打印的字符

 

4.5.Unicode字符串操作符(u/U)

Unicode字符串操作符,大写(U)和小写(u)是和Unicode字符串一起被引入的,用来把标准字符串或者是包含Unicode字符的字符串转换成完全的Unicode字符串对象

 

5.内建函数

 

5.1.标准类型函数

 

函数

功能

cmp(str1,str2)

同比较操作符一致,都是根据字符串的ASCII码值进行比较

 

 

 

5.2.序列类型函数

 

函数

功能

len(str)

返回字符串的字符数

max(str)

返回字符串的最大的字符(按照ASCII码值排列)

min(str)

返回字符串的最小的字符(按照ASCII码值排列)

enumerate(str)

返回一个enumerate对象,该对象生成由iter每个元素的index值和字符串中字符组成的元组

zip(str1,str2)

返回列表,其中每个元素为str1与str2的第i个字符组成的一个元组

 

 

 

 

 

5.3.字符串类型函数

 

函数

功能

raw_input(str)

使用给定的字符串str提示用户输入并将这个输入作为字符串返回

str(obj)

工厂函数,接受任意类型的对象,然后创建该对象的可打印的字符串表示。可作为参数传给isinstance()函数来判断一个对象的类型

unicode(obj)

工厂函数,接受任意类型的对象,然后创建该对象的Unicode的字符串表示。可作为参数传给isinstance()函数来判断一个对象的类型.如果obj是对象,则需要该对象定义__unicode__()方法

chr()

用一个范围在range(256)内的整数作为参数,返回一个对象的字符

unichr()

用一个范围在range(X)内的整数作为参数,返回一个对象的Unicode字符.X的范围依赖于编码 USC2 65536或0x0000·0xFFFF,UCS4 1114112或0x000000-0x110000

ord()

是chr和uichr的配对函数,以一个字符作为参数,返回对应的ASCII数值或者unicode数值。如果Unicode字符串超出Python定义范围,则返回TypeError异常

 

示例:

>>> isinstance('abcd',str)

True

>>> isinstance('abcd',unicode)

False

>>> isinstance(u'abcd',unicode)

True

 

6.字符串内建方法

 

方法

功能

string.capitalize()

把字符串的第一个字符大写

string.center(width)

返回一个原字符串居中,并使用空格填充☞长度width的新字符串

string.count(str,beg=0,end=len(string))

返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数

string.decode(decoding='UTF-8',errors='strict')

以decoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'

string.encode(encoding='UTF-8',errors='strict')

以encoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'

string.endswith(obj,beg=0,end=len(string)

检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回True,否则返回Fasle

string.expandtabs(tabsize=8)

把字符串string何种的tab符号转为空格,默认的空格数tabsize是8

string.find(str,beg=0,end=len(string))

检测str是否包含在string中,如果beg和end指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

string.index(str,beg=0,end=len(string))

跟find()方法一样,只不过如果str不在string中会报一个异常

string.isalnum()

如果string至少有一个字符并且所有字符都是字母或者数字则返回True,否则返回False

string.isalpha()

如果string至少有一个字符并且所有字符都是字母则返回True,否则返回False

string.isdecimal()

如果string只包含十进制数字则返回True,否则返回False

string.isdigit()

如果string只包含数字则返回True,否则返回False

string.islower()

如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写则返回True,否则返回False

string.isnumeric()

如果string中只包含数字字符,则返回True,否则返回False

string.isspace()

如果string中只包含空格,则返回True,否则返回False

string.istitle()

如果string是标题化的(见title())则返回True,否则返回False

string.isupper()

如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False

string.join(seq)

以string作为分隔符,将seq中所有的元素(字符串表示)合并为一个新的字符串

string.ljust(width)

返回一个原字符串左对齐,并使用空格填充至长度width的新字符串

string.lower()

转换string中所有大写字符为小写

string.lstrip()

截掉string左边的空格

string.partition(str)

类似find和split的结合体,从str出现的第一个位置起,把字符串string分成一个3元组(string_pre_str,str,string_post_str),如果string中不包含str则string_pre_str==string

string.replace(str1,str2,num=string.count(str1))

把string中的str1替换成str2,如果num指定,则替换不超过num次

string.rfind(str,beg=0,end=len(string))

类似于find函数,不过是从右边开始查找

string.rindex(str,beg=0,end=len(string))

类似于index函数,不过是从右边开始

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度width的新字符串

stirng.rpartition(str)

类似于partition函数,不过是从右边开始查找

string.rstrip()

删除string字符串末尾的空格

string.split(str="",num=string.count(str))

以str为分隔符切片string,如果num有指定值,则仅分割num个子字符串

string.splitlines(num=string.count('\n'))

按照行分割,返回一个保护各行作为元素的列表,如果num指定则仅切片num行

string.startswith(obj,beg=0,end=len(string))

检查字符串是否是以obj开头,是则返回True,否则返回False,如果beg和end指定值,则在指定范围内检查

string.strip([obj])

在string上执行lstrip和rstrip

string.swapcase()

翻转string中的大小写

string.title()

返回‘标题化’的string,就是说所有单词都是以大写开始,其余字母均为小写(见istitle)

string.translate(str,del="")

根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符放到del参数中

string.upper()

转换string中的小写字母为大写

string.zfill(width)

返回长度为width的字符串,原字符串string右对应,前面填充0

 

 

 

 

7.字符串的独特特性

 

7.1.特殊字符串和控制字符

一个反斜线加一个单一字符可以表示一个特殊字符,通常是一个不可打印的字符。

转义字符

八进制

十进制

十六进制

字符

说明

\0

000

0

0x00

NULL

空字符Null

\a

007

7

0x07

BEL

响铃字符

\b

010

8

0x08

BS

退格

\t

011

9

0x09

HT

横向制表符

\n

012

10

0x0A

LF

换行

\v

013

11

0x0B

VT

纵向制表符

\f

014

12

0x0C

FF

换页

\r

015

13

0x0D

CR

回车

\e

033

27

0x1B

ESC

转义

\"

042

34

0x22

"

双引号

\'

047

39

0x27

'

单引号

\\

134

92

0x5C

\

反斜杠

 

7.2.三引号

Python的三引号允许一个字符串跨多行,字符串中可以保护换行符,制表符以及其他特殊字符。三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)

 

7.3.字符串不变性

 

 

8.Unicode

Unicode使得计算机可以支持多种语言,通过使用一个或多个字节来表示一个字符的方法突破了ASCII的限制。

string模块只保留了ASCII码的支持,故而string模块已经不推荐使用,在任何需要跟Unicode兼容的代码里都不要使用该模块

 

内建的str函数和chr函数并没有升级成可以处理Unicode。他们只能处理常规的ASCII编码字符,如果一个Unicode字符串被作为参数传给了str函数,首先会被转换为ASCII字符串然后在交给str函数。如果该Unicode字符串包含任何不被ASCII字符串支持的字符,会导致str函数报异常

>>> str(u'abc')

'abc'

>>>

>>> str(u'中国')

  File "<stdin>", line 1

    str(u中国')

         ^

SyntaxError: invalid syntax

 

8.1.unicode使用规则

· 程序中出现字符串时一定要加个前缀u

· 不要用str()函数,用unicode()代替

· 不要用过时的string模块

· 不到必须时不要在程序中编解码Unicode字符,只在要写入文件或数据库或者网络时,才调用encode()函数;相应的,只在需要把数据读回来的时候才调用decode()函数

 

 

9.相关模块

 

模块

说明

string

字符串操作相关函数和工具,比如Templaye类

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数据库

转载于:https://my.oschina.net/u/3275937/blog/1817084

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值