Python语法学习记录(13):字符串

1、字符串简介:

字符串(即不能修改的字符list)字符串是一个整体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。进行子字符串的提取。

2、字符串的操作:

2.1 字符串的赋值定义、子字符串

字符串的赋值与定义:

string_test = "Hello My Friend"

子字符串的提取:

可以使用方括号来截取字符串

string_test = "Hello My Friend"
srring_test_sub = string_test[:6]

2.2 字符串运算符

下表实例变量a值为字符串 “Hello”,b变量值为 “Python”:

操作符描述实例
+字符串连接a + b 输出结果: HelloPython
*重复输出字符串a*2 输出结果:HelloHello
[]通过索引获取字符串中字符a[1] 输出结果 e
[ : ]截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。a[1:4] 输出结果 ell
in成员运算符 - 如果字符串中包含给定的字符返回 True’H’ in a 输出结果 True
not in成员运算符 - 如果字符串中不包含给定的字符返回 True’M’ not in a 输出结果 True
r/R原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。print( r'\n' ) print( R'\n' )
%格式字符串请看下一节内容。

2.3 字符串的内置函数:

len(string) # 返回字符串长度
max(str)#返回字符串 str 中最大的字母
min(str)#返回字符串 str 中最小的字母
cmp(“my friend”, str) #字符串比较。第一个大,返回1

2.4 字符串的转换:

oat(str) #变成浮点数,float(“1e-1″) 结果为0.1
int(str) #变成整型, int(“12″) 结果为12
int(str,base) #变成base进制整型数,int(“11″,2) 结果为2
long(str) #变成长整型,
long(str,base) #变成base进制长整型

2.5 字符串的分割与拼接:

分割:

str.partition(s) # 用s将str切分成三个值
str.split(s[, num]) # 以s为分隔符切片str num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num+1 个子字符串
str.splitlines([keepends]) # 按照行分隔,返回一个包含各行作为元素的列表.按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
str.rpartition(s) # 类似于 partition()函数,不过是从右边开始查找

拼接:

join(seq) # 以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
s1 = "-"
s2 = ""
seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
print (s1.join( seq ))
print (s2.join( seq ))
# r-u-n-o-o-b
# runoob

2.6 字符串查找、替换、索引、计数:

str.replace(a, b[,max]) # 将字符串str中的a替换成b  次数不超过max次数
str.count(s) # 返回字符串s在str中出现的次数
str.find(s) # 返回字符串s在字符串str中的位置索引,没有则返回-1  
str.rfind(s) # 类似于 find()函数,不过是从右边开始查找
str.index(s) # 和find()方法一样,但是如果s不存在于str中则会抛出异常
str.rindex(s) # 类似于 index(),不过是从右边开始

字符映射表:

str.maketrans(intab, outtab)
str.translate(table)
bytes.translate(table[, delete])    
bytearray.translate(table[, delete]) 

例子:

intab = "aeiou"
outtab = "12345"
trantab = str.maketrans(intab, outtab)   # 制作翻译表
 
str = "this is string example....wow!!!"
print (str.translate(trantab))
# 输出 th3s 3s str3ng 2x1mpl2....w4w!!!

# 制作翻译表
bytes_tabtrans = bytes.maketrans(b'abcdefghijklmnopqrstuvwxyz', b'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
# 转换为大写,并删除字母o
print(b'runoob'.translate(bytes_tabtrans, b'o'))
# 输出 b'RUNB'

2.7 字符串的大小写和部分字符处理:

str.capitalize() # 把字符串的首字母大写
str.lower() # 转换str中所有大写字符为小写
str.strip() # 等于同时执行rstrip()和lstrip()  
str.title() # 返回”标题化”的str,所有单词都是以大写开始,其余字母均为小写
str.upper() # 返回str所有字符为大写的字符串
str.center(width) # 将原字符串用空格填充成一个长度为width的字符串,原字符串内容居中
str.ljust(width) # 返回一个原字符串左对齐的并使用空格填充至长度width的新字符串
str.lstrip() # 去掉str左边的不可见字符
str.rstrip() # 去掉str右边的不可见字符
str.swapcase() # 将字符串中大写转换为小写,小写转换为大写
str.zfill(width) # 返回长度为 width 的字符串,原字符串str右对齐,前面填充0
str.rjust(width) # 返回一个原字符串右对齐的并使用空格填充至长度width的新字符串
expandtabs(tabsize=8) # 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是8 

2.8 字符串的编码解码:

str.decode(encoding=’UTF-8,errors=’strict’) # 以指定编码格式解码字符串  
str.encode(encoding=’UTF-8,errors=’strict’) # 以指定编码格式编码字符串
bytes.decode(encoding="utf-8", errors="strict") # Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。

2.9 判断字符串的某种情况:

str.endswith(s) # 判断字符串str是否以字符串s结尾
str.isalnum() # 如果str至少有一个字符并且都是字母或数字则返回True,否则返回False  
str.isalpha() # 如果str至少有一个字符并且都是字母则返回True,否则返回False  
str.isdigit() # 如果str只包含数字则返回 True 否则返回 False  
str.isdecimal() # 检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false
str.islower() # 如果str存在区分大小写的字符,并且都是小写则返回True 否则返回False  
str.isspace() # 如果str中只包含空格,则返回 True,否则返回 False  
str.istitle() # 如果str是标题化的(单词首字母大写)则返回True,否则返回False  
str.isupper() # 如果str存在区分大小写的字符,并且都是大写则返回True 否则返回False
str.startswith(s) # 检查字符串str是否是以s开头,是则返回True,否则返回False

3、字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

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

3.1 python字符串格式化符号:

符 号描述
%c格式化字符及其ASCII码
%s格式化字符串
%d格式化整数
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%f格式化浮点数字,可指定小数点后的精度
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址

3.2 格式化操作符辅助指令:

符号功能
*定义宽度或者小数点精度
-用做左对齐
+在正数前面显示加号( + )
在正数前面显示空格
#在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)
0显示的数字前面填充’0’而不是默认的空格
%‘%%‘输出一个单一的’%’
(var)映射变量(字典参数)
m.n.m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

4、字符串常量

需要import string

常数含义
string.ascii_lowercase小写字母’abcdefghijklmnopqrstuvwxyz’
string.ascii_uppercase大写的字母’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.ascii_lettersascii_lowercase和ascii_uppercase常量的连接串
string.digits数字0到9的字符串:’0123456789’
string.hexdigits字符串’0123456789abcdefABCDEF’
string.letters字符串’abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.lowercase小写字母的字符串’abcdefghijklmnopqrstuvwxyz’
string.octdigits字符串’01234567’
string.punctuation所有标点字符
string.printable可打印的字符的字符串。包含数字、字母、标点符号和空格
string.uppercase大学字母的字符串’ABCDEFGHIJKLMNOPQRSTUVWXYZ’
string.whitespace空白字符 ‘\t\n\x0b\x0c\r ‘

5、转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

转义字符描述
(在行尾时)续行符
\反斜杠符号
单引号
"双引号
\a响铃
\b退格(Backspace)
\e转义
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数,yy代表的字符,例如:\o12代表换行
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

6、字符串模板Template

通过string.Template可以为Python定制字符串的替换标准,下面是具体列子:

from string import Template
s = Template('$who like $what')
print(s.substitute(who='i', what='python'))
# 输出 i like python
print(s.safe_substitute(who='i')) # 缺少key时不会抛错
# 输出 i like $what
print(Template('${who}LikePython').substitute(who='I')) # 在字符串内时使用{}
# 输出 ILikePython

Template还有更加高级的用法,可以通过继承string.Template, 重写变量delimiter(定界符)和idpattern(替换格式), 定制不同形式的模板。

import string
template_text = '''
    Delimiter : $de
    Replaced : %with_underscore
    Ingored : %notunderscored
'''
d = {'de': 'not replaced',
     'with_underscore': 'replaced',
     'notunderscored': 'not replaced'}
class MyTemplate(string.Template):
    # 重写模板 定界符(delimiter)为"%", 替换模式(idpattern)必须包含下划线(_)
    delimiter = '%'
    idpattern = '[a-z]+_[a-z]+'

print(string.Template(template_text).safe_substitute(d))  # 采用原来的Template渲染
print(MyTemplate(template_text).safe_substitute(d))  # 使用重写后的MyTemplate渲染

输出:

    Delimiter : not replaced
    Replaced : %with_underscore
    Ingored : %notunderscored
    
    Delimiter : $de
    Replaced : replaced
    Ingored : %notunderscored

原生的Template只会渲染界定符为$的情况,重写后的MyTemplate会渲染界定符为%且替换格式带有下划线的情况。

7、常用字符串技巧

7.1 反转字符串

>>> s = '1234567890'
>>> print s[::-1]
0987654321

7.2 关于字符串链接

尽量使用join()链接字符串,因为’+’号连接n个字符串需要申请n-1次内存,使用join()需要申请1次内存。

7.3 固定长度分割字符串

>>> import re
>>> s = '1234567890'
>>> re.findall(r'.{1,3}', s)  # 已三个长度分割字符串
['123', '456', '789', '0']

7.4 使用()括号生成字符串

sql = ('SELECT count() FROM table '
       'WHERE id = "10" '
       'GROUP BY sex')

print sql

SELECT count() FROM table WHERE id = "10" GROUP BY sex

7.5 将print的字符串写到文件

>>> print >> open("somefile.txt", "w+"), "Hello World"  # Hello World将写入文件somefile.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值