python的字符串,变量,
String
字符串的格式控制
f-string
f"这是{a}变量,这是{a:0^10}总共十个字符,中间挖坑填a,其余补0"
string.center(50,'*') #50个字符,中间挖坑填a,其余补*
> | 右对齐 | |
< | 左对齐 | {a:0<10} |
^ | 居中 | {a:0^10} |
% | 精度 | {a:0.3%} 保留三位 |
进制与字符
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
chr(x ) 将一个整数转换为一个字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个十进制整数转换为一个十六进制字符串
oct(x) 将一个十进制整数转换为一个八进制字符串
bin(x) 将一个十进制整数转换为二进制 bin( 10 ) return ‘0b111’
int( ‘x’ , 2 ) 将二进制字符转换为十进制
int( ‘x’ , 8 ) 将八进制字符转换为十进制 bin( ‘456’ , 8 ) return 302
int( ‘x’ , 16 ) 将十六进制字符转换为十进制
字符串前缀
前缀 | 作用 | 备注 |
u"string" | 后面的string以Unicode格式进行编码,一般用在中文字符串前面,放置因为源码存储格式问题,导致再次使用时出现乱码 | python3将字符串处理为unicode类型 |
r"string" | 表示一个非转义原生字符串,常用在表示路径时,和正则表达式中 | r’input\n’ == input\n |
b"string" | 表示这是一个bytes对象,二进制 | python2将字符串处理为bytes类型 |
f"string" | 字符串格式化 |
字符串的常用方法
- 字符串形式变换
1. .title() 驼峰
.capitalize() 首字母大写
.upper() 全部大写
.lower() 全部小写
.center() 居中
.format() 格式化
.partition(sep) 从sep第一次出现的位置,将字符串拆分为三部分,0,sep,2
.strip() 删除首尾空格,lstrip(),rstrip()
.split(separator,max) 分割字符串中所有出现str的片段,默认以空格分割,max代表最大分割为几段
.splitlines() 和.split('\n'),相似,常用于读取文档(f.readlines()和f.read().splitlines()的区别"str=None".join([string1,string2]) 拼接字符串
- 查询
1. .index('sub',start=None,end=None) 查询第一个匹配对象的索引
.count() 查询总字符数
.endswith(suffix,start=None,end=None) 查询后缀以什么结尾,返回bool .startswith(preffix,start=None,end=None)
- 判断
.isspace()
.isuper()
.islower()
.istitle()
.isnumeric()
.isdigit()
.isascii()
.isdecimal()
.isidentifier()
判断是否是有效的python标识符,可用来判断变量名是否合法
之前加 is 便能实现判断,返回一个布尔值 - 从右边开始
1. .lstrip()删除右边的空格
.lsplit(str)很多操作默认从左至右,可以在方法前加 l 使得从右边开始
- 正则表达式
正则表达式是一种通用的匹配方法,在python中体现在 re 模块
正则表达式很杂,需要经常使用才能做到熟练
import re
- 常用操作符
. --- 表示任何单个字符,,字符表上出现的任意一个字符
[] --- 表示字符集,对单个字符给出取值位置,
实例:[abc] 表示 a 或 b 或 c 任意一个字符
[^ ] --- 抑或符 ,表示非字符集,对单个字符给出排除位置
实例:[^abc] 表示,出现一个字符,这个字符不是 a,抑或 b 抑或 c,抑或 A,只要不是小写a,b,c
* ---表示前一个字符出现 0 次或无限次扩展
实例: abc* 表示 可以是,ab,abcc,abccc 等
+ ---表示前一个字符出现 1 次,或无限次扩展
实例:abc+ 表示 可以是abc,abcc ,abccc 等
? ---表示前一个字符出现 0 次或 1 次扩展,即属于可选选项,
实例:abc 可以是ab,abc
| ----- 或符。表示左右表达式任意一个
实例:abc|def 可以是abc 或def
{m} --表示扩展前一个字符 m 次
实例:ab{2}c 表示为 abbc
{m,n}--表示扩展前一个字符 m 至 n 次(含n)
实例:ab{1,2}c 表示abc ,或abbc
^ ---如果其没有出现在 [] 中,则表示匹配字符串的开头
实例:^abc 匹配以abc 为开头的字符串
$ --- 表示匹配字符串的结尾
实例:abc$ 表示匹配以abc 为结尾的字符串
() ---表示分组标记,在内部只能使用 | (或) 操作符 分组标记,可以作用于字符组 r'(\xa0){3}'
实例:(abc) 表示 abc,(abc|def) 表示 abc 或 def
regex = re.compile(r'(0\d{2})-(\d{8}')
text = regex.search('My python number is 032-12345678')
text.group(0) : 032-12345678
text.group(1) : 032
text.group(2) : 12345678
\d ---表示数字,等价于[0-9]
\w ---表示单词字符 等价于[A-Z,a-z,0-9,_]
\s ---匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
*?/+?/??/{m,n}? --这四个在保持原意的同时,皆返回最小匹配
- 常用方法
pattern: 正则表达式的字符串后原生字符串表示
string: 待匹配字符串
flags: 正则表达式使用时的控制标记
maxsplit : 最大分割数
count : 匹配的最大替换次数
repl : 替换匹配字符串的字符串
re.I (re.IGNORECASE) 使忽略正则表达式的大小写,【A-Z】能够匹配小写字符
re.M (re.MULTILINE) 使正则表达式中的 ^ 操作符能够将给定字符串的每行当做匹配的开始
re.S (re.DOTALL) 使正则表达式中的 . 操作符,能够匹配所有字符,默认匹配除换行符外的所有字符
函数式一次性用法:
# re.search(pattern,string,flags=0) -- 从一个字符串中搜索匹配正则表达式的第一个位置,返回 match 对象
# re.match(pattern,string,flags=0) -- 将以正则表达式作为头部的字符串进行匹配,返回 match 对象
# re.findall(pattern,string,flags=0)--搜索字符串,以列表类型返回全部能匹配的字串
# re.split(pattern,string,maxsplit = 0,flags=0) -- 将一个字符串按照正则表达式匹配结果进行分割,把匹配的部分去掉,返回列表类型,maxsplit 为最大分割数,
# re.finditer(pattern,string,flags=0) -- 搜索字符擦混,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象
# re.sub(pattern,relpl,string,count=0,flags=0) -- 在一个字符串中替换所有匹配正则表达式的字串,返回替换后的字符串
面对对象的用法----pattern 并不是正则表达式,这仅仅是一种正则表达式的表示方法,
# regex = re.compile(pattern,flags) -- 将正则表达式的字符串形式编译成原生字符串表示,经过了 compile 的编译
- match 对象
常用方法大都返回match对象
# match 对象
<re.Match object; span=(0, 2), match='aa'>
# 比如说做爬虫提取数据时
origin_image_data= '''src="";code=utf-8'''
origin_data = re.compile('"(?P<image>data.*?)";code=(?P<code>.*)')
data = origin_data.search(origin_image_data)
# 一次匹配分为能匹配到的所有内容和分组的内容
print(data.group(1)) #
# 分组捕获
print(data.group('image')) #
print(data.group('code')) # utf-8
变量
在最外层定义的变量为全局变量,函数中可以使用此全局变量,但不能修改
- global
在最外层定义的变量为全局变量,函数中可以使用此全局变量,但不能修改,使用global声明后,可以使用和修改,还可以声明新的全局变量 - nonlocal
用于外部内嵌函数的变量,只能声明外部函数中的变量,用在闭包中
demo_1():
n = 0
demo_2():
nonlocal n #此时可以在内嵌函数中修改外部函数中n的初值
n += 1
return n
- 与或非
1. and 两者都为真,则取其后,有一者为假则取0
‘a’ and ‘b’ return ‘b’
‘b’ and ‘a’ return ‘a’
or 两者都为真,则取其前, 有一者为真则取真值
‘a’ or ‘b’ return ‘a’
‘b’ or ‘a’ return ‘b’
- 判断类型
isinstance(object,classinfo)
与type(classinfo)
类似
object – 实例对象。
classinfo[^classinfo 一定要是确定的类型,不能使用 type(object) 来作比较] – 可以是直接或间接类名、基本类型或者由它们组成的元组
判断 object 的类型是否与 classinfo 的类型相同,若相同返回 True,否则 False
if isinstance(1,int):
print('ok')
# ok
数据类型
python的数据类型
- 不可变对象(inmutable):str,int,float,tuple
- 可变对象(mutable):dict,set,list
不可变对象也是可哈希对象,
a = 3
#{a:3} 哈希就是键值映射