re模块
re模块
就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
字符匹配(普通字符,元字符):
1 普通字符:大多数字符和字母都会和自身匹配
>>> re.findall('alvin','yuanaleSxalexwupeiqi')
['alvin']
2 元字符:. ^ $ * + ? { } [ ] | ( ) \
import re
#1
re.findall('a','alvin yuan') #返回所有满足匹配条件的结果,放在列表里
#2
re.search('a','alvin yuan').group() #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
# 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
#3
re.match('a','abc').group() #同search,不过尽在字符串开始处进行匹配
#4
ret=re.split('[ab]','abcd') #先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret)#['', '', 'cd']
#5
ret=re.sub('\d','abc','alvin5yuan6',1)
print(ret)#alvinabcyuan6
ret=re.subn('\d','abc','alvin5yuan6')
print(ret)#('alvinabcyuanabc', 2)
#6
obj=re.compile('\d{3}')
ret=obj.search('abc123eeee')
print(ret.group())#123
import re
ret=re.finditer('\d','ds3sy4784a')
print(ret) #<callable_iterator object at 0x10195f940>
print(next(ret).group())
print(next(ret).group())
son模块
之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval的重点还是通常用来执行一个字符串表达式,并返回表达式的值。
import json
x="[null,true,false,1]"
#print(eval(x))
print(json.loads(x))
json 模块
import json
dic = {'name': 'alvin', 'age': 23, 'sex': 'male'}
print(type(dic)) # <class 'dict'>
j = json.dumps(dic)
print(type(j)) # <class 'str'>
f = open('序列化对象', 'w')
f.write(j) # -------------------等价于json.dump(dic,f)
f.close()
# -----------------------------反序列化<br>
import json
f = open('序列化对象')
data = json.loads(f.read()) # 等价于data=json.load(f)
json
json 字符串必须用双引号
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
import json
#dct="{'1':111}"#json 不认单引号
#dct=str({"1":111})#报错,因为生成的数据还是单引号:{'one': 1}
dct='{"1":"111"}'
print(json.loads(dct))
#conclusion:
#无论数据是怎样创建的,只要满足json格式,就可以json.loads出来,不一定非要dumps的数据才能loads
dic = {"name": "rxz","age": 29,"sex":"gils"}
# json.dumps参数可以是字典,字符串,元组,整型,列表
data_str = json.dumps(dic) #=====>h把dic变成字符创格式
print(type(data_str)) #<class 'str'>
print(data_str) #{"name": "rxz", "age": 29, "sex": "gils"}
f = open("new_hello","w")
f.write(data_str)
f.flush()
f.close()
f_read = open("new_hello","r")
data = json.loads(f_read.read()) # 把数据取出来变成原来的格式
print(type(data)) #<class 'dict'>
print(data) #{'name': 'rxz', 'age': 29, 'sex': 'gils'}
python中json.dump() 和 json.dumps() 有那些区别
下面演示如何将一个Python数据结构转换为JSON:
import json
dic = {"name": "rxz","age": 29,"sex":"gils"}
data_str = json.dumps(dic)
下面演示如何将一个JSON编码的字符串转换回一个Python数据结构:
import json
data = json.loads(json_str)
如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:
import json
# Writing JSON data
with open('data.json', 'w') as f:
json.dump(data, f)
# Reading data back
with open('data.json', 'r') as f:
os模块
os模块是与操作系统交互的一个接口
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd
os.curdir 返回当前目录: ('.')
os.pardir 获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove() 删除一个文件
os.rename("oldname","newname") 重命名文件/目录
os.stat('path/filename') 获取文件/目录信息
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os.path.abspath(path) 返回path规范化的绝对路径
os.path.split(path) 将path分割成目录和文件名二元组返回
os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
sys模块
import sys
#命令行参数List,第一个元素是程序本身路径
print(sys.argv)
#结果['D:/Pycharm Community/python内置函数/sysTest.py']
#获取Python解释程序的版本信息
print(sys.version)
#结果3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
#最大的Int值
#print(sys.maxint)
#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值(临时修改,不会保存)
print(sys.path)
#结果['D:\\Pycharm Community\\python内置函数', 'D:\\Pycharm Community\\python内置函数', 'C:\\Users\\Songyu.Ji\\venv\\python内置函数\\Scripts\\python37.zip', 'C:\\Users\\Songyu.Ji\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs', 'C:\\Users\\Songyu.Ji\\AppData\\Local\\Programs\\Python\\Python37-32\\lib', 'C:\\Users\\Songyu.Ji\\AppData\\Local\\Programs\\Python\\Python37-32', 'C:\\Users\\Songyu.Ji\\venv\\python内置函数', 'C:\\Users\\Songyu.Ji\\venv\\python内置函数\\lib\\site-packages', 'C:\\Users\\Songyu.Ji\\venv\\python内置函数\\lib\\site-packages\\setuptools-39.0.1-py3.7.egg', 'C:\\Users\\Songyu.Ji\\venv\\python内置函数\\lib\\site-packages\\pip-9.0.3-py3.7.egg']
#返回操作系统平台名称
print(sys.platform) #win32
#退出程序,正常退出时exit(0)
print(sys.exit(0))
random模块
随机生成内容
import random
#0,1之间时间生成的浮点数 float
print(random.random())
#随机生成传入参数范围内的数字 即 1,2,3
print(random.randint(1, 3))
#随机生成传入参数范围内的数字,range顾头不顾尾
print(random.randrange(1, 3))
#随机选择任意一个数字
print(random.choice([1, '23', [4, 5]]))
#随机选择任意两个数字
print(random.sample([1, '23', [4, 5]], 2))
随机生成一个验证码
#验证码
def v_code():
ret = ""
for i in range(5):
num = random.randint(0,9)
alf = chr(random.randint(65,122))
#字母与数字随机拼接
num_alf = str(random.choice([num,alf]))
ret +=num_alf
return ret
print(v_code())
time模块
三种时间表示
在Python中,通常有这几种方式来表示时间:
时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
格式化的时间字符串
元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
时间转化表 如图显示:
import time
#time.sleep(5)
print("睡眠5s")
#sleep() #线程推迟自定的时间运行,单位为秒
#clock()
#这个需要注意啦,在不同的系统上含义不同,在unix系统上,它返回的是'进程时间',用秒表示的浮点数(时间戳)
#在windows中,第一次调用,返回的是进程运行的实际时间,而第二次之后的调用是自第一次调用后到现在的运行
#的时间,即两次的时间差
# 返回当前时间的时间戳(以秒计算,从1970年1月1日00:00:00开始到现在的时间差)
print(time.time()) # 结果:1537428578.9319177
# 将一个时间戳转换为当前时区
t = time.localtime()
print(t)
# 结果time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=15, tm_min=33, tm_sec=9, tm_wday=3, tm_yday=263, tm_isdst=0)
year = t.tm_year
month = t.tm_mon
print(year) #2018
#gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
print(time.gmtime())
# 结果time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=7, tm_min=37, tm_sec=46, tm_wday=3, tm_yday=263, tm_isdst=0)
#返回utc时间的struc时间对象格式
print(time.gmtime(time.time()-9000))
# 结果time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=5, tm_min=17, tm_sec=10, tm_wday=3, tm_yday=263, tm_isdst=0)
#-------将结构化时间转换时间戳
print(time.mktime(time.localtime())) # 结果1537429976.0
# -----将结构化时间转换Fomart格式的字符串时间
print(time.strftime("%Y-%m-%d %X",time.localtime())) #结果 2018-09-20 15:58:28
# --将字符串时间转化结构化时间
print(time.strptime("2016:12:26:12:34:33","%Y:%m:%d:%X"))
#结果time.struct_time(tm_year=2016, tm_mon=12, tm_mday=26, tm_hour=12, tm_min=34, tm_sec=33, tm_wday=0, tm_yday=361, tm_isdst=-1)
# 直接看时间
print(time.asctime()) #Thu Sep 20 16:04:16 2018 把结构换时间转换成固定的字符串表达式
print(time.ctime()) # Thu Sep 20 16:04:16 2018 把时间戳时间转换成固定的字符串表达式
datatime表示的一种时间
import datetime
#显示当前时间日期
print(datetime.datetime.now())
# 2018-09-20 16:10:36.019032
#当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(3))
#2018-09-23 16:10:36.020031
#当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(-3))
#2018-09-17 16:10:36.020031
#当前时间+30分
print(datetime.datetime.now() + dat

本文详细介绍了Python中的re模块,用于处理正则表达式,包括字符匹配、查找、替换等功能;json模块,讲解了如何将字符串与Python对象相互转换;time模块,涉及时间戳、时间格式化和时间操作;以及random模块,展示了各种随机数的生成方法。此外,还提到了sys模块和os模块,分别用于系统相关操作和文件系统交互。
4万+

被折叠的 条评论
为什么被折叠?



