python模块知识
一、定义
模块是用来从逻辑上组织python代码(变量、函数、类、逻辑:实现一个功能),本质上就是一个python文件。
包:本就就是一个目录,必须带有一个__init__.py文件
二、导入方法
impor使一个变量名引用整个模块对象,必须通过模块名称来得到该模块的属性。
from会把变量名复制到另外一个作用域,所以它就可以让我们直接在脚本中使用复制后的变量名,而不需要通过模块。就像def一样,import和from是可执行语句,而不是编译期间的声明,而且它们可以嵌套在if测试中,出现在函数def之中等,直到执行程序时,python执行到这些语句,才会进行解析。
import module_name
import module_name,module2_name
from module_name import *( 不建议使用这种方法。相当于将module_name中的代码 全部复制到当前文件下)
from module_name import m1,m2,m3(从module_name中导入m1,m2,m3到当前文件下)
from module_name import m1 as m2 (从module_name中导入m1并在当前文件中命名为m2)
创建一个test1.py文件,在test2中添加test1模块。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zkilr
#test1.py
name = 'zhaokai'
def sayhello():
print('hello,' + name)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zkilr
#test2.py
import tets1
print( tets1.name )
tets1.sayhello()
导入包的本质就是在执行包下面的__init__文件
新建一个douyin文件夹,创建两个python文件,一个是tets1.py,两外一个是__init__.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zkilr
#__init__.py
from . import tets1
#test1.py
name = 'zhaokai'
def sayhello():
print('hello,' + name)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:zkilr
#test2.py
import douyin
douyin.tets1.sayhello()
三、import本质
import module_name是将调用模块的代码解释一遍并统一赋值给了module_name。所以调用方法为module_name.xxxx。
四、各个模块
python中的模块可分为三类分别是:标准库模块、开源模块、自定义模块
1、时间模块:time和datatime模块,在python中通常有这几种方式来表示时间:
(1)timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。
(2)format_time格式化的时间字符串
(3)struct_time元祖共九个元素。
import time
# 生成timestamp
time.time()
# 1477471508.05
#struct_time to timestamp
time.mktime(time.localtime())
#生成struct_time
# timestamp to struct_time 本地时间
time.localtime()
time.localtime(time.time())
# time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=16, tm_min=45, tm_sec=8, tm_wday=2, tm_yday=300, tm_isdst=0)
# timestamp to struct_time 格林威治时间
time.gmtime()
time.gmtime(time.time())
# time.struct_time(tm_year=2016, tm_mon=10, tm_mday=26, tm_hour=8, tm_min=45, tm_sec=8, tm_wday=2, tm_yday=300, tm_isdst=0)
#format_time to struct_time
time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')
# time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
#生成format_time
#struct_time to format_time
time.strftime("%Y-%m-%d %X")
time.strftime("%Y-%m-%d %X",time.localtime())
# 2016-10-26 16:48:41
#os模块就是对操作系统进行操作,使用该模块必须先导入模块:
import os
#getcwd() 获取当前工作目录(当前工作目录默认都是当前文件所在的文件夹)
result = os.getcwd()
print(result)
#listdir() 获取指定文件夹中所有内容的名称列表
result = os.listdir('C:/Users/keen/Desktop/Douyin-Bot-master')
print(result)
#mkdir() 创建文件夹
os.mkdir('girls') #在当前的工作目录下创建
os.mkdir('boys',0o777)
#makedirs() 递归创建文件夹
os.makedirs('C:/sy/a/b/c/d')
#rmdir() 删除空目录
os.rmdir('girls')
#removedirs 递归删除文件夹 必须都是空目录
os.removedirs('C:/sy/a/b/c/d')
#rename() 文件或文件夹重命名
os.rename('/home/sy/a','/home/sy/alibaba'
#stat() 获取文件或者文件夹的信息
result = os.stat('/home/sy/PycharmProject/Python3/10.27/01.py)
print(result)
#环境变量
'''
环境变量就是一些命令的集合
操作系统的环境变量就是操作系统在执行系统命令时搜索命令的目录的集合
'''
#getenv() 获取系统的环境变量
result = os.getenv('PATH')
print(result.split(':'))
#putenv() 将一个目录添加到环境变量中(临时增加仅对当前脚本有效)
#os.putenv('PATH','/home/sy/下载')
os.system('syls')
#abspath() 将相对路径转化为绝对路径
path = './boys'#相对
result = os.path.abspath(path)
print(result)
#dirname() 获取完整路径当中的目录部分 & basename()获取完整路径当中的主体部分
path = '/home/sy/boys'
result = os.path.dirname(path)
print(result)
result = os.path.basename(path)
print(result)
#split() 将一个完整的路径切割成目录部分和主体部分
path = '/home/sy/boys'
result = os.path.split(path)
print(result)
#join() 将2个路径合并成一个
var1 = '/home/sy'
var2 = '000.py'
result = os.path.join(var1,var2)
print(result)
#splitext() 将一个路径切割成文件后缀和其他两个部分,主要用于获取文件的后缀
path = '/home/sy/000.py'
result = os.path.splitext(path)
print(result)
#getsize() 获取文件的大小
path = '/home/sy/000.py'
result = os.path.getsize(path)
print(result)
#isfile() 检测是否是文件
path = '/home/sy/000.py'
result = os.path.isfile(path)
print(result)
#isdir() 检测是否是文件夹
result = os.path.isdir(path)
print(result)
#islink() 检测是否是链接
path = '/initrd.img.old'
result = os.path.islink(path)
print(result)
#getctime() 获取文件的创建时间 get create time
#getmtime() 获取文件的修改时间 get modify time
#getatime() 获取文件的访问时间 get active time
import time
filepath = '/home/sy/下载/chls'
result = os.path.getctime(filepath)
print(time.ctime(result))
result = os.path.getmtime(filepath)
print(time.ctime(result))
result = os.path.getatime(filepath)
print(time.ctime(result))
#os.environ 用于获取和设置系统环境变量的内置值
import os
#获取系统环境变量 getenv() 效果
print(os.environ['PATH'])
#设置系统环境变量 putenv()
os.environ['PATH'] += ':/home/sy/下载'
os.system('chls')
#exists() 检测某个路径是否真实存在
filepath = '/home/sy/下载/chls'
result = os.path.exists(filepath)
print(result)
#isabs() 检测一个路径是否是绝对路径
path = '/boys'
result = os.path.isabs(path)
print(result)
3.range模块
# random各种使用方法 import random
# 随机生成[0.1)的浮点数
print("random():", random.random())
# 随机生成1000-9999之间的整数
print("randint(1000, 9999):", random.randint(1000, 9999))
# 随机生成0-20之间的偶数
print("randrange(0, 21, 2):", random.randrange(0, 21, 2))
# 随机生成0-20之间的浮点数
print("uniform(0, 20):", random.uniform(0, 20))
# 从序列中随机选择一个元素
list_string = ['a', 'b', 'c', 'd', 'e']
print("choice(list):",random.choice(list_string))
print("choice(string):", random.choice('abcd'))
# 对列表元素随机排序
list_number = [1, 2, 3, 4, 5] random.shuffle(list_number)
print("shuffle(list):",list_number)
# 从指定序列中随机获取指定长度的片断
print("sample(sequence):", random.sample('abcdefg', 2))
4.sys模块
sys.argv: 实现从程序外部向程序传递参数。
sys.exit([arg]): 程序中间的退出,arg=0为正常退出。
sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding('utf8'),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回'mbcs',mac下返回'utf-8'.
sys.path: 获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到。
sys.platform: 获取当前系统平台。
sys.stdin,sys.stdout,sys.stderr: stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
5.shutil模块
主要作用与拷贝文件用的。
shutil.copyfileobj(文件1,文件2):将文件1的数据覆盖copy给文件2。
import shutil
f1 = open("1.txt",encoding="utf-8")
f2 = open("2.txt","w",encoding="utf-8")
shutil.copyfileobj(f1,f2)
shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。
import shutil
shutil.copyfile("1.txt","3.txt")
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/ - format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
import shutil
ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
6.json模块
import json
info = {
'name':'zhaokai',
'age':23
}
f = open( "test.txt","w")
f.write( json.dumps(info))
f.close()
import json
data = open( "test.txt","r")
dataoff = json.loads(data.read())
print(dataoff["age"])