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. 字符串形式变换
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. 查询
1. .index('sub',start=None,end=None) 查询第一个匹配对象的索引
.count() 查询总字符数
.endswith(suffix,start=None,end=None) 查询后缀以什么结尾,返回bool .startswith(preffix,start=None,end=None)
  1. 判断
    .isspace().isuper() .islower() .istitle().isnumeric() .isdigit() .isascii() .isdecimal().isidentifier() 判断是否是有效的python标识符,可用来判断变量名是否合法
    之前加 is 便能实现判断,返回一个布尔值
  2. 从右边开始
1. .lstrip()删除右边的空格
.lsplit(str)很多操作默认从左至右,可以在方法前加 l 使得从右边开始
  1. 正则表达式

正则表达式是一种通用的匹配方法,在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
变量

在最外层定义的变量为全局变量,函数中可以使用此全局变量,但不能修改

  1. global
    在最外层定义的变量为全局变量,函数中可以使用此全局变量,但不能修改,使用global声明后,可以使用和修改,还可以声明新的全局变量
  2. nonlocal
    用于外部内嵌函数的变量,只能声明外部函数中的变量,用在闭包中
demo_1():
	n = 0
	demo_2():
		nonlocal n #此时可以在内嵌函数中修改外部函数中n的初值
		n += 1
		return n
  1. 与或非
1. and 两者都为真,则取其后,有一者为假则取0
‘a’ and ‘b’ return ‘b’
‘b’ and ‘a’ return ‘a’
or 两者都为真,则取其前, 有一者为真则取真值
‘a’ or ‘b’ return ‘a’
‘b’ or ‘a’ return ‘b’
  1. 判断类型
    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} 哈希就是键值映射