python基础 (五)模块篇1
真心觉得python这门语言是业界良心:
- json&pickle模块
- os模块
- sys模块
- time&datetime模块
- random模块
- shutil模块
- 匿名函数
- 高阶函数
- 内置函数
一、json&pickle模块
两个模块都用于序列化
- json,用于字符串和python数据类型间的转换
- pickle,用于python特有的数据类型和python的数据类型进行转换
json模块包含功能:dumps、dump、loads、load
pickle模块包含功能:dumps、dump、loads、load
json模块序列化与反序列化:
import json
info={name:'SuperXia','age':23}
#这是个字典不能像字符串一样直接写入文本文件中,会报错
#先用json模块来实现
#序列化方法一:
f=open("test.json",'w')
f.write(json.dumps(info))
#序列化方法二:
json.dump(info,f)
f.close()
#反序列化一:
f=open("test.json",'r')
data=json.loads(f.read())
#反序列化二:
data=json.load(f)
f.close()
pickle模块序列化与反序列化:
#json只能将一些普通通用的数据类型序列化,不能将特有的python数据序列化
#比如:自定义函数
def sayhi(name):
print("hello",name)
info={'name':'alex','age':22,'func':sayhi}
#序列化方法一:
f=open("test.pk",'wb')
#注意:用pickle序列化时一定要以wb和rb模式写入和读取,因为pickle文件存储的是bytes类型
f.write(pickle.dumps(info))
#序列化方法二:
pickle.dump(info,f)
#反序列化一:
f=open("test.pk",'rb')
data=pickle.loads(f.read())
#反序列化二:
data=pickle.load(f)
f.close()
二、 os模块
提供对操作系统进行调用的接口
os.getwd()#获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")#改变当前脚本工作目录,相当于shell下的cd
os.curdir#返回('.')表示当前目录
os.pardir#返回('..')表示当前目录的父目录
os.makedirs("dirname1/dirname2")#可生成多个递归目录,形参:绝对路径
os.removedirs("dirname1")#若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,以此类推,形参:绝对路径
os.mkdir("dirname")#生成单级目录,相当于mkdir dirname
os.rmdir("dirname")#删除单级目录,若目录不为空,则无法删除,报错,相当于shell中的rmdir dirname
os.listdir("dirname")#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表的方式打印,
os.remove("textname")#删除一个文件
os.rename("oldname","newname")#重命名文件/目录
os.stat("textname")#获取文件/目录信息
os.sep#返回'/',表明当前操作系统特定的路径分隔符,linux:'/',win:'\\'
os.linesep#返回'\n',表明当前操作系统的行终止符,linux:'\n',win:'\r\n"
os.pathsep#返回":",表明当前操作系统用于分割文件路径的字符串
os.name#返回当前操作系统名称,win:'nt',linux:'posix'
os.system("ls")#运行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的目录,就是os.path.split(path)的第二个元素
os.path.exists(path)#如果path存在返回True;如果path不存在返回False
os.path.isabs(path)#如果path是绝对路径返回True
os.path.isfile(path)#如果path是一个存在的文件,返回True
os.path.isdir(path)#如果path是一个存在的目录,返回True
os.path.join(path1,path2,path3)#将多个路径组合后返回,会自动补齐'/'
os.path.getatime(path)#返回path所指向的文件或目录的最后存取时间
os.path.getmtime(path)#返回path所指向的文件或目录的最后修改时间
三、sys模块
sys.argv#为一个list,表示命令行参数,第一个元素是程序本身相对路径,列表的其他元素为后面的其他命令参数
sys.exit(n)#退出程序引发SystemExit异常, 可以捕获异常执行些清理工作. n默认值为0, 表示正常退出. 其他都是非正常退出
sys.version#获取当前python解释器的版本信息
sys.maxsize#最大的int值
sys.path#返回模块的搜索路径
sys.platform#返回操作系统名称
sys.stdout.write('please:')#与print的区别就是不换行,接着打印
val=sys.stdin.readline()[:-1]#输入,会把\n带入所以加-1
最后提个小建议,若是想为自己定义的模块创建搜索路径可以:
#假设脚本和自定义模块在一个父路径下
#.
#├── a
#└── module
sys.path.append(os.dirname(os.path.abspath(__file__)))
#将父路径加入搜索路径
四 、time&datetime模块
time模块:
import time
#3种格式examples:
#时间戳:1503240767.6681664
#struct time:time.struct_time(tm_year=2017, tm_mon=8, tm_mday=20, tm_hour=14, tm_min=55, tm_sec=57, tm_wday=6, tm_yday=232, tm_isdst=0)
#字符串:
time.timezone#返回本地时间同UTC的偏移秒数
time.altzone#返回夏令时地区同UTC的偏移秒数
time.daylight#是否使用夏令时
time.tzname#返回时区名字
time.time()#返回当前时间,时间戳格式
time.localtime()#返回本地时间的struct time对象格式
#time.struct_time(tm_year=2017, tm_mon=8, tm_mday=20, tm_hour=22, tm_min=37, tm_sec=42, tm_wday=6, tm_yday=232, tm_isdst=0)
#时间戳->struct time
time.gmtime(time.time())#该struct time为UTC时间
time.localtime(time.time())#该struct time为本地时间
#struct time->时间戳
t=time.struct_time(tm_year=1973, tm_mon=11, tm_mday=27, tm_hour=9, tm_min=52, tm_sec=3, tm_wday=1, tm_yday=331, tm_isdst=0)
time.mktime(t)#转换成时间戳为:123213123
#struct time->字符串
t=time.struct_time(tm_year=1973, tm_mon=11, tm_mday=27, tm_hour=9, tm_min=52, tm_sec=3, tm_wday=1, tm_yday=331, tm_isdst=0)
time.strftime("%Y-%m-%d %H:%M:%S",t)#转化为字符串:1973-11-27 01:52:03
#字符串->struct time
t="1973-11-27 01:52:03"
time.strptime(t,"%Y-%m-%d %H:%M:%S")
#time.struct_time(tm_year=1973, tm_mon=11, tm_mday=27, tm_hour=1, tm_min=52, tm_sec=3, tm_wday=1, tm_yday=331, tm_isdst=-1)
字符串只能和struct time相互转换,若时间戳与字符串要相互转换,必须通过struct time作为中间介质。三者关系如下图。
五 、random模块
随机数
import random
random.random()#生成[0,1)之间的任意浮点数
random.uniform(1,10)#能指定区间[1,10]之间的任意浮点数
random.randint(1,9)#生成[1,9]之间的任意整数
random.randrange(1,9)#生成[1,9)之间的任意整数
#randrange是用来弥补randint的,使其不包含最后的元素
random.choice("hello")#从传入的序列(字符串、列表、元组)中随机选取1个元素
random.sample("hello",2)#从传入的序列(字符串、列表、元组)中随机选取2个元素
输出:
0.30126606068943185
2.1615831700308417
6
4
h
['o', 'e']
有趣的shuffle洗牌功能:
l=list(range(10))
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(l)
#[7, 8, 0, 4, 6, 3, 9, 1, 2, 5]
利用random生成随机验证码:
captcha=""
for i in range(4):
current = random.randrange(4)
if current == i:
# 加入字母
tmp = chr(random.randint(65,90))
else:
#加入数字
tmp = str(random.randint(0,9))
captcha+=tmp
print(captcha)#运行获得:CB85
六、shutil模块
这是一个比较高级的文件、文件夹、压缩包处理模块。
1、shutil.copyfileobj(fsrc,fdst)
作用:将file_like obj数据内容拷贝到另一个file_like obj中,每次写入16KB。
import shutil
f1=open("text1.txt","r")
f2=open("text2.txt","w")
shutil.copyfileobj(f1,f2)
#运行后,会得到一个新建好的text2.txt文件并且与text1.txt内容一样
2、shutil.copyfile(src,dst)
作用:将src的内容拷贝给dst
上述的代码可以由这一行给代替了!
shutil.copyfile("text1.txt","text2.txt")
3、shutil.copymode(src,dst)
作用:将src的权限拷贝给dst
提示:权限用os.stat查看 st_mode
shutil.copymode("text1.txt","text2.txt")
4、shutil.copystat(src,dst)
作用:将src的状态信息都拷贝给dst,包括(mode bits atime mtime flags)
提示:状态信息用os.stat查看
shutil.copystat("text1.txt","text2.txt")
5、shutil.copy(src,dst)
作用:将src的内容和权限都拷贝给dst
提示:状态信息用os.stat查看
shutil.copy("text1.txt","text2.txt")
6、shutil.copy2(src,dst)
作用:将src的内容和状态信息都拷贝给dst
提示:状态信息用os.stat查看
shutil.copy2("text1.txt","text2.txt")
7、shutil.ignore_patterns(*patterns)
作用:配合copytree,作为其参数
8、shutil.copytree(src,dst,symlinks=False,ignore=None)
作用:递归拷贝文件,也就是拷贝文件夹src到文件夹dst,并且可以忽略ignore中传入的类型文件
shutil.copytree("dir","new_dir",ignore=ignore_pattern("*pyc","tmp*"))
9、shutil.rmtree(path, ignore_errors=False, οnerrοr=None)
作用:递归删除文件
shutil.rmtree("new_dir")
10、shutil.move(src,dst)
作用:递归移动文件,将文件夹src放入dst文件夹中
shutil.move("new_dir","dir")
11、shutil.make_archive(base_name,format,root_dir, base_dir…)
作用:创建一个压缩文件
- base_name:压缩包的保存路径
- format:压缩包种类
- root_dir:要压缩文件夹路径
- base_dir:从哪个文件夹开始压缩,压缩后的文件并保持与路径一致的文件夹包含关系
#压缩文件仅仅只包括test文件夹里的内容
shutil.make_archive("/home/xzx1228/shutil_test","zip",root_dir="/home/xzx1228/PycharmProjects/month1_user/shutil模块/test")
#压缩文件包括shutil模块文件夹里的内容并且保持了该路径的tree关系
shutil.make_archive("/home/xzx1228/shutil_test","zip",base_dir="/home/xzx1228/PycharmProjects/month1_user/shutil模块")