主题内容:(1)模块、包的定义和使用;(2)内置模块(time、datetime);(3)random、os、sys、shutil模块
模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能)本质就是.py结尾的Python文件(文件名:test.py 对应模块名:test)
包:用来从逻辑上组织模块的, 本质就是一个目录(必须带有一个__init__.py文件)
包的创建方法:New -->Python Package方法一:import module_name
方法二:from module_name import * 从这个模块中导出所有内容,调用方法时直接用func(),不用module.func()。
但是慎用,当当前脚本中有函数名和导入的内容中的函数名重复时,将会容易有问题。 解决办法:from module from func as func_other_name 将导入的函数名字取别名,防止和当前脚本的函数名重复。二者的区别: (1)导入模块的本质就是把Python文件解释一遍。 例如 module_name = all_code相当于把all_code赋值给变量module_name。 (2)from module_name import func就是从module_name中拿出来这个func,所以直接调用就可以用了。
导入模块的本质就是把Python文件解释一遍。
非当前目录下时,如何导入模块: import module_name --> module_name.py --> module_name.py的路径(import sys sys.path)
如何找不同目录下的路径: 1 import sys,os print(sys.path)#获取当前路径,得到一个列表路径.
2 让你需要的路径加入到当前路径的列表中。 os.path.abspath(file) #获取当前文件的路径 需要把…\day5的路径加入到所需列表中,如何获取请看接下来的步骤。
3 使用os.path.dirname()获取当前文件的父级目录。 os.path.dirname(os.path.abspath(file))相当于…\day5\module_test
再次获取父目录:x=os.path.dirname(os.path.dirname(os.path.abspath(file)))相当于…\day5
4 把这个目录加入到当前路径所拥有的列表中,第一步骤中的。 sys.path.append(x),这是加入到列表的最后,也可以加入到第一个,可使用sys.path.insert(0,x)
5 这个时候直接调用就可以了,使用module.func()
导入包的本质就是执行该包下的__init__.py文件。
如何导入包: 例如:在p_test文件中使用包package_test中的test1脚本。
1、导入包的本质就是执行该包下的__init__.py文件。所以在init文件中把test1文件导入进去。 form . import test1 是从当前路径下导入test1(绝对路径) 2 在p_test文件中使用包package_test中的test1脚本
例如当test_module_fun.py文件中有多个方法都要调用模块module_jia中的某些方法时,将会造成运行非常慢,每运行到一个logger()函数时,就要找模块(会重复的找模块)并导入,接下来如何优化呢? 直接使用from module_jia import test123,将不会再一直找模块了。
from module_jia import test123 #直接把函数导入进来,免去找模块的繁琐 def logger(): test123() #直接使用函数,不用再找模块了 print("in the logger") def logger1(): test123() print("in the logger1") def logger2(): test123() print("in the logger2")1、标准库 2、开源模块 3、自定义模块
一、time模块 表示时间的方式: (1)时间戳:time.time()显示的是当前时间和1970年开始的时间段,以秒计算表示。函数有time()、 clock()。
(2)格式化的时间字符串:年-月-日 时:分:秒 time.strftime()、time.strptime()
time.strptime(“格式化的字符串”,“格式”) 要告诉你的格式化字符串,是什么格式的,才能转为struct_time
(3)元祖(struct_time):年月日,时分秒,每周的第几天,每年的第几天,时区。 返回struct_time的函数只要有gmtime()、 localtime() 、striptime()。
gmtime():返回的是UTC的标准时间 localtime():返回的中国的UTC+8的时间UTC:世界标准时间(格林威治天文时间),中国使用的是UTC+8
三种方式之间的转化:
二、datetime模块
datetime是在time模块的高级封装。 有函数datetime.datetime.now() :获取当前的时间
datetime.datetime.now()+datatime.timedelta(3) #当前时间+3天 datetime.datetime.now()+datatime.timedelta(hours=3) #当前时间+3个小时获取当前时间,并进行修改:
t = datetime.datetime.now() print(t.replace(minute=3,hour=2))#时间替换根据random模块的方法,随机生成验证码的实验:
import random check_code='' #设置一个空的验证码 for i in range(4): #循环4次,为验证码加入4位数 current_site = random.randrange(0,4) #判断i和current_site是否都是随机相同的,如果相同此验证码的位就是字母,否则就是数字 if current_site == i: temp = chr(random.randint(65,90)) #chr()是数字转ASCII的方法。 else: temp = random.randint(0,9) check_code = check_code + str(temp) print(check_code)os模块:提供对操作系统进行调用的接口
import 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 输出用于分割文件路径的字符串 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所指向的文件或者目录的最后修改时间高级的 文件、文件夹、压缩包 处理模块
import shutil shutil.copyfile(file,file_new) #拷贝文件 shutil.copyfileobj(file,file_new[,length]) #将文件内容拷贝到另一个文件中,可以部分内容 shutil.copy(file,file_new) #拷贝文件和权限 shutil.copy2(file,file_new) #拷贝文件和状态信息 shutil.copymode(file,file_new) #仅拷贝权限。内容、组、用户均不变 shutil.copystat(file,file_new) #拷贝状态的信息,包括:mode bits, atime, mtime, flags #很有用的方法 #递归的去拷贝文件(直接copy一个树目录) shutil.copytree(src, dst, symlinks=False, ignore=None) #递归的去删除文件 shutil.rmtree(path[, ignore_errors[, onerror]])shutil.make_archive(base_name, format,…) 创建压缩包并返回文件路径,例如:zip、tar
#创建压缩包并返回文件路径,例如:zip、tar shutil.make_archive(base_name, format,...) base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径, 如:www =>保存至当前路径 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/ format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar” root_dir: 要压缩的文件夹路径(默认当前目录) owner: 用户,默认当前用户 group: 组,默认当前组 logger: 用于记录日志,通常是logging.Logger对象例如:
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 ret = shutil.make_archive('wwwwww','zip',root_dir='/user/a') #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录 ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')zip、gzip、tar的介绍 tar打包不压缩 zip打包且压缩 添加链接描述