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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41554005/article/details/100553523

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_letters ascii_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

猜你喜欢

转载自blog.csdn.net/qq_41554005/article/details/100553523