python 中常见的内置模块

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值