01-字符串操作-os文件操作-时间日期对象-面向对象-这正则

1. str 字符串操作 #

常见的字符串函数
zip 
    l = ['a', 'b', 'c', 'd', 'e', 'f']
    b = zip(l[:-1], l[1:])
    print(dict(b))  # 可以映射成字典,元组,列表
    {'a': 'b', 'b': 'c', 'c': 'd', 'd': 'e', 'e': 'f'}
str1.split()
	过指定分隔符对字符串进行切片如果参数num 有指定值则仅分隔 num 个子字符串

str1.splitlines():
	按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
    
str1.join(): 
    用于将序列中的元素以指定的字符连接生成一个新的字符串
    
max():
    返回给定参数的最大值参数可以为序列
    
min():
    返回字符串中最小的字母
    
str1.replace(old, new[, max]):
    把字符串中的 old旧字符串 替换成 new(新字符串)如果指定第三个参数max则替换不超过 max 次
    
str1.maketrans():
    返回字符串转换后生成的新字符串
    
str47.translate(table[, delete]):
	intable = 'adsda
	outtable = '12345
	trantab = str.marketrans(intable, outtable)
	st1 = '*********'
	result = st1.translate(trantab[,delate])
	result 是翻译后的结果 delate  可 正则删除
    返回翻译后的字符串,若给出了 delete 参数则将原来的bytes中的属于delete的字符删除剩下的字符要按照table中给出的映射来进行映射 
    
str1.startswith(str, beg=0,end=len(string)):
    方法用于检查字符串是否是以指定子字符串开头如果是则返回 True否则返回 False如果参数 beg 和 end 指定值则在指定范围内检查
    
str1.endswith(suffix[, start[, end]]):
    方法用于判断字符串是否以指定后缀结尾如果以指定后缀结尾返回True否则返回False可选参数"start""end"为检索字符串的开始与结束位置
    s
str1.encode():
    指定的编码格式编码字符串
    
bytes.decode():
    以指定的编码格式解码 bytes 对象默认编码为 'utf-8'
    
str1.isalpha():
    方法检测字符串是否只由字母组成
    
str1.isalnum():
    检测字符串是否由字母和数字组成
    
str1.isupper():
    检测字符串中所有的字母是否都为大写
    
str1.islower():
    检测字符串是否由小写字母组成
    
str1.istitle():
    检测字符串中所有的单词拼写首字母是否为大写且其他字母为小写
    
str1.isdigit():
    检测字符串是否只由数字组成
    
str1.isnumeric():
    检测字符串是否只由数字组成这种方法是只针对unicode对象
    
str1.isdecimal():
    检查字符串是否只包含十进制字符这种方法只存在于unicode对象
    
str1.isspace():
    检测字符串是否只由空白字符组成
    
len():
    返回对象字符列表元组等长度或项目个数
    
lower():
    转换字符串中所有大写字符为小写
    
upper():
    将字符串中的小写字母转为大写字母
    
swapcase():
    用于对字符串的大小写字母进行转换
    
capitalize():
    将字符串的第一个字母变成大写,其他字母变小写
    
title():
    返回"标题化"的字符串,就是说所有单词都是以大写开始
    
center(width[, fillchar]):   ?????
    返回一个指定的宽度 width 居中的字符串fillchar 为填充的字符默认为空格
    
ljust(width[, fillchar]):
    返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串如果指定的长度小于原字符串的长度则返回原字符串
    
rjust(width[, fillchar]):
    回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串如果指定的长度小于字符串的长度则返回原字符串
    
zfill(width):
    返回指定长度的字符串原字符串右对齐前面填充0
    
count():
    统计字符串里某个字符出现的次数可选参数为在字符串搜索的开始与结束位置
    
find():
    方法检测字符串中是否包含子字符串 str 如果指定 beg开始 和 end结束 范围则检查是否包含在指定范围内如果指定范围内如果包含指定索引值返回的是索引值在字符串中的起始位置如果不包含索引值返回-1
    
rfind():
    返回字符串最后一次出现的位置如果没有匹配项则返回-1
    
index():
    方法检测字符串中是否包含子字符串 str 如果指定 beg开始 和 end结束 范围则检查是否包含在指定范围内该方法与 python find()方法一样只不过如果str不在 string中会报一个异常
    
rindex(str, beg=0 end=len(string)):
    返回子字符串 str 在字符串中最后出现的位置如果没有匹配的字符串会报异常你可以指定可选参数[beg:end]设置查找的区间
strip():
    用于移除字符串头尾指定的字符默认为空格
    
lstrip():
    方法用于截掉字符串左边的空格或指定字符
rstrip():
    删除 string 字符串末尾的指定字符默认为空格.

2. OS模块 文件操作 #

1.获取当前操作系统         os.name
2.查看当前操作系统的详细信息    os.uname()
3.获取当前操作系统的环境变量     ** os.environ    返回为一个dict
4.获取指定的环境变量    os.environ.get('path')    **
5.获取当前目录     os.curdir
6.获取当前工作目录       os.getcwd()
7.在当前目录下创建新的目录    os.mkdir('path')
8.删除目录       os.rmdir()
9.删除文件       os.remove()
10.文件重命名         os.rename(old, new)
11.获取文件属性      os.stat('path')
12.路径拼接        os.path.join()
13.拆分文件扩展名        os.path.split()       os.path.splitext()                ************
14.判断目录是否存在      os.path.exists()
15.判断是否是目录                os.path.isdir()
16.判断是否是文件    	  os.path.isfile()
17.获取文件的大小	      os.path.getsize()
18.获取当前文件目录所在的目录   os.path.dirname()
19.获取当前文件的文件名         os.path.basename() 

文件打开 open() #

模式	描述
r	以只读方式打开文件文件的指针将会放在文件的开头这是默认模式
rb	以二进制格式打开一个文件用于只读文件指针将会放在文件的开头这是默认模式
r+	打开一个文件用于读写文件指针将会放在文件的开头
rb+	以二进制格式打开一个文件用于读写文件指针将会放在文件的开头
w	打开一个文件只用于写入如果该文件已存在则将其覆盖如果该文件不存在创建新文件
wb	以二进制格式打开一个文件只用于写入如果该文件已存在则将其覆盖如果该文件不存在创建新文件
w+	打开一个文件用于读写如果该文件已存在则将其覆盖如果该文件不存在创建新文件
wb+	以二进制格式打开一个文件用于读写如果该文件已存在则将其覆盖如果该文件不存在创建新文件
a	打开一个文件用于追加如果该文件已存在文件指针将会放在文件的结尾也就是说新的内容将会被写入到已有内容之后如果该文件不存在创建新文件进行写入
ab	以二进制格式打开一个文件用于追加如果该文件已存在文件指针将会放在文件的结尾也就是说新的内容将会被写入到已有内容之后如果该文件不存在创建新文件进行写入
a+	打开一个文件用于读写如果该文件已存在文件指针将会放在文件的结尾文件打开时会是追加模式如果该文件不存在创建新文件用于读写
ab+	以二进制格式打开一个文件用于追加如果该文件已存在文件指针将会放在文件的结尾如果该文件不存在创建新文件用于读写

file() 对象方法 #

file.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)

file.readline() 返回一行

file.readlines([size]) 返回包含size行的列表,size 未指定则返回全部行

for line in f: print line #通过迭代器访问

f.write("hello\n") #如果要写入字符串以外的数据,先将他转换为字符串.

f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).

f.seek(偏移量,[起始位置]) 用来移动文件指针.

偏移量:单位:比特,可正可负
起始位置:0-文件头,默认值;1-当前位置;2-文件尾
f.close() 关闭文件

3.time datetime calendar #

time.time()  时间戳,从1970-1-1 0时开始计算时间  秒
time.gmtime()  时间戳转换为UTC时间
time.localtime()  获取本地时间
time.mktime()    将时间转化为时间戳函数
time.asctime()     将时间转化为用户可读的字符串格式
time.ctime()    将时间戳转化为用户可读的时间
time.strftime()  将时间字符串格式化输出给用户看
time.strptime()   将时间转化为元组时间的格式

datetime.datetime.now()
datetime.datetime()
.strftime()
datetime.datetime.strptime(date, '%Y-%m-%d')

calendar.month()
calendar.calendar()
calendar.monthrange()
calendar.monthcalendar()

格式化时间字符串 #

%y 两位数的年份表示00-99
%Y 四位数的年份表示000-9999
%m 月份01-12
%d 月内中的一天0-31
%H 24小时制小时数0-23
%I 12小时制小时数01-12
%M 分钟数00=59
%S 秒00-59
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天001-366
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数00-53星期天为星期的开始
%w 星期0-6),星期天为星期的开始
%W 一年中的星期数00-53星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

4.面向对象 #

@property   # 属性包装器
@   .setter       # 修改属性
@classmethod    # 类方法
@staticmethod     # 抽象方法
MethodType         # 动态添加

抽象方法  from abc import abstractmethod, ABCMeta
		metaclass=ABCmeta   # 默认的类参数
    	@abstractmethod    # 定义抽象方法
 super().__init__()

from enum import Enum       # 枚举
class Color(Enum):
    red = 1

运算符重载 #

在类中,对内置对象(例如,整数和列表)所能做的事,几乎都有相应的特殊名称的重载方法。下表列出其中一些最常用的重载方法。

  方法          	重载        	调用                              
  init        	构造函数      	对象建立:X = Class(args)            
  del         	析构函数      	X对象收回                           
  add         	运算符+      	如果没有iadd,X+Y,X+=Y               
  or          	运算符\|(位OR)	如果没有ior,X\|Y,X\|=Y              
  repr,str    	打印、转换     	print(X)、repr(X),str(X)         
  call        	函数调用      	X(*args,**kargs)                
  getattr     	点号运算      	X.undefined                     
  setattr     	属性赋值语句    	X.any = value                   
  delattr     	属性删除      	del X.any                       
  getattribute	属性获取      	X.any                           
  getitem     	索引运算      	X[key],X[i:j],没iter时的for循环和其他迭代器
  setitem     	索引赋值语句    	X[key] = value,X[i:j] = sequence
  delitem     	索引和分片删除   	del X[key],del X[i:j]           
  len         	长度        	len(X),如果没有bool,真值测试            
  bool        	布尔测试      	bool(X),真测试                     
  lt,gt,      	特定的比较     	X < Y,X > Y                     
  le,ge,      	          	X<=Y,X >= Y                     
  eq,ne       	          	X == Y,X != Y                   
  radd        	右侧加法      	Other+X                         
  iadd        	实地(增强的)加法 	X += Y (or else add)            
  iter,next   	迭代环境      	I = iter(X),next(I)             
  contains    	成员关系测试    	item in X (任何可迭代的)              
  index       	整数值       	hex(X),bin(X),oct(X),O[X],O[X:] 
  enter,exit  	环境管理器     	with obj as var:                
  get,set     	描述符属性     	X.attr,X.attr = value,del X.attr
  new         	创建        	在init之前创建对象                     

5.正则表达式 #

finditer()  迭代器    用 next() 方法进行迭代器操作
sub()    返回被替换后的字符串
subn()   返回一个元组, 第一个为被替换是字符串, 第二个是替换的次数

分组;
	除了简单的判断是否匹配外, 还能提取子串
    用() 表示提取出的分组
	str2 = '01053247654'
    m = re.match((r'(\d{3})(\d{8})'), str2)
    m = re.match((r'(?P<name1>\d{3})-(?P<name2>\d{8})'), str2)

    group(0)  原始字符串
    group(1)  
    group(2)
    m = m.groups()
    print(m)
    
    
compile(pattern ,flags=0)    pattern 正则表达式
    
    
    

正则常用字符 #

\w匹配字母数字及下划线

\W匹配非字母数字及下划线

\s匹配任意空白字符等价于 [\t\n\r\f].

\S匹配任意非空字符

\d匹配任意数字等价于 [0-9]

\D匹配任意非数字

\A匹配字符串开始

\Z匹配字符串结束如果是存在换行只匹配到换行前的结束字符串

\z匹配字符串结束

\G匹配最后匹配完成的位置

\n匹配一个换行符

\t匹配一个制表符

^匹配字符串的开头

$匹配字符串的末尾

.匹配任意字符除了换行符当re.DOTALL标记被指定时则可以匹配包括换行符的任意字符

[...]用来表示一组字符,单独列出[amk] 匹配 'a''m''k'

[^...]不在[]中的字符abc 匹配除了a,b,c之外的字符

*匹配0个或多个的表达式

+匹配1个或多个的表达式

?匹配0个或1个由前面的正则表达式定义的片段非贪婪方式

{n}精确匹配n个前面表达式

{n, m}匹配 n 到 m 次由前面的正则表达式定义的片段贪婪方式

a|b匹配a或b

( )匹配括号内的表达式也表示一个组

正则匹配模式 #

re.match()    开头开始匹配  一个
re.search()    整个查找 一个
re.findall()     全局查找,匹配所有
re.sub('查找要替换的 表达式', '替换的字符', str)
re.compile()     compile()还可以传入修饰符,例如re.S等修饰符,这样在search()、findall()等方法中就不需要额外传了。所以compile()方法可以说是给正则表达式做了一层封装,以便于我们更好地复用。

常用的表达式 #

校验数字的表达式
数字^[0-9]*$
n位的数字^\d{n}$
至少n位的数字^\d{n,}$
m-n位的数字^\d{m,n}$
零和非零开头的数字^(0|[1-9][0-9]*)$
非零开头的最多带两位小数的数字^([1-9][0-9]*)+(\.[0-9]{1,2})?$
带1-2位小数的正数或负数^(\-)?\d+(\.\d{1,2})$
正数负数和小数^(\-|\+)?\d+(\.\d+)?$
有两位小数的正实数^[0-9]+(\.[0-9]{2})?$
有1~3位小数的正实数^[0-9]+(\.[0-9]{1,3})?$
非零的正整数^[1-9]\d*$^([1-9][0-9]*){1,3}$^\+?[1-9][0-9]*$
非零的负整数^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
非负整数^\d+$^[1-9]\d*|0$
非正整数^-[1-9]\d*|0$^((-\d+)|(0+))$
非负浮点数^\d+(\.\d+)?$^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
非正浮点数^((-\d+(\.\d+)?)|(0+(\.0+)?))$^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
正浮点数^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
负浮点数^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
浮点数^(-?\d+)(\.\d+)?$^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
校验字符的表达式
汉字^[\u4e00-\u9fa5]{0,}$
英文和数字^[A-Za-z0-9]+$^[A-Za-z0-9]{4,40}$
长度为3-20的所有字符^.{3,20}$
由26个英文字母组成的字符串^[A-Za-z]+$
由26个大写英文字母组成的字符串^[A-Z]+$
由26个小写英文字母组成的字符串^[a-z]+$
由数字和26个英文字母组成的字符串^[A-Za-z0-9]+$
由数字26个英文字母或者下划线组成的字符串^\w+$^\w{3,20}$
中文英文数字包括下划线^[\u4E00-\u9FA5A-Za-z0-9_]+$
中文英文数字但不包括下划线等符号^[\u4E00-\u9FA5A-Za-z0-9]+$^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
禁止输入含有~的字符[^~\x22]+


特殊需求表达式
Email地址^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
域名[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
InternetURL[a-zA-z]+://[^\s]*^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
手机号码^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX""XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
国内电话号码(0511-4405222021-87888822)\d{3}-\d{8}|\d{4}-\d{7}
电话号码正则表达式支持手机号码3-4位区号7-8位直播号码14位分机号: ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
身份证号(1518位数字)最后一位是校验位可能为数字或字符X(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
帐号是否合法(字母开头允许5-16字节允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
密码(以字母开头长度在6~18之间只能包含字母数字和下划线)^[a-zA-Z]\w{5,17}$
强密码(必须包含大小写字母和数字的组合不能使用特殊字符长度在8-10之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
日期格式^\d{4}-\d{1,2}-\d{1,2}
一年的12个月(0109和112)^(0?[1-9]|1[0-2])$
一个月的31天(0109和131)^((0?[1-9])|((1|2)[0-9])|30|31)$
钱的输入格式
有四种钱的表示形式我们可以接受:"10000.00""10,000.00", 和没有 "分""10000""10,000"^[1-9][0-9]*$
这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式^(0|[1-9][0-9]*)$
一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号^(0|-?[1-9][0-9]*)$
这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧下面我们要加的是说明可能的小数部分^[0-9]+(.[0-9]+)?$
必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10""10.2" 是通过的^[0-9]+(.[0-9]{2})?$
这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样^[0-9]+(.[0-9]{1,2})?$
这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
备注这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
xml文件^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
中文字符的正则表达式[\u4e00-\u9fa5]
双字节字符[^\x00-\xff] (包括汉字在内可以用来计算字符串的长度(一个双字节字符长度计2ASCII字符计1))
空白行的正则表达式\n\s*\r (可以用来删除空白行)
HTML标记的正则表达式<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格制表符换页符等等)非常有用的表达式)
腾讯QQ号[1-9][0-9]{4,} (腾讯QQ号从10000开始)
中国邮政编码[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
IP地址((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))