目录
datetime 模块:时间处理模块,比time方便清晰的时间计算。例:显示三天后的时间格式化输出。
- random 实例 - 生成随机验证码(随机整形和字符,指定位数)
sys 模块:python解释器系统相关模块,多用于脚本编写
- shutil 对压缩包的处理 - zipfile压缩、解压缩
- shutil 对压缩包的处理 - tarfile压缩、解压缩
time模块:与时间相关功能
''' time模块:与时间相关的功能 三种时间类型: 1.时间戳(timestamp):从1970-01-01 到现在的秒数,用于取时间差 time.time():用来计算时间间隔,返回浮点型 2.本地时间(localtime):计算机当前所在位置的时间 time.localtime():返回结构化时间 3.世界协调时间(UTC) time.gmtime():返回结构化时间 常用方法总结: 1.时间戳:time.time() 应用:用来计算时间间隔 2.结构化时间:time.localtime() time.gtime() 应用:1.单独获取当前时间的任意部分 2.用来时间戳与格式化输出时间之间的转换 3.格式化的字符串形式:time.strftime('%Y-%m-%d') 应用:方便的取出格式化字符串形式的时间,用来显示 datetime模块 vs time模块 1.日期计算比time模块方便 datetime.datetime.now()+datetime.timedelta(days=3) 2.时间戳转换成字符串日期时间 datetime.datetime.fromtimestamp(123123123) '''
import time print(time.time()) # 1536136291.5491552 print(time.strftime('%Y-%m-%d %X')) # 2018-09-05 16:31:31 print(time.localtime()) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=5, tm_hour=16, tm_min=31, tm_sec=31, tm_wday=2, tm_yday=248, tm_isdst=0) print(time.gmtime()) # time.struct_time(tm_year=2018, tm_mon=9, tm_mday=5, tm_hour=8, tm_min=31, tm_sec=31, tm_wday=2, tm_yday=248, tm_isdst=0) # 格式化输出日期 print(time.strftime('%Y-%m-%d %X')) # 2018-09-05 16:31:31 # 将格式化字符串的时间转换为结构化时间 print(time.strptime("30 Nov 00", "%d %b %y")) # time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1) # 时间戳转结构化,参数为秒数,即1970年01-01过参数秒的结构化时间输出 print(time.localtime(10)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=10, tm_wday=3, tm_yday=1, tm_isdst=0) # 结构化转时间戳 print(time.mktime(time.localtime())) # 1536136291.0 # 当前进程睡眠一段时间,单位为秒 time.sleep() time.sleep(2) # 返回 星期英文简写 月 日 时间 年(Thu Aug 9 09:11:42 2018) print(time.asctime()) # Wed Sep 5 16:31:33 2018 print(time.ctime()) # Wed Sep 5 16:31:33 2018
''' %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %M 分钟数(00=59) %m 月份(01-12) %D 08/09/18 本地相应的日期表示 %d 月内中的一天(0-31) %x 本地相应的日期表示 %X 本地相应的时间表示 %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %Z 当前时区的名称 %% %号本身 '''
datetime 模块:时间处理模块,比time方便清晰的时间计算。例:显示三天后的时间格式化输出。
import datetime # # 获取时间 获取当时时间,返回格式化字符时间 print(datetime.datetime.now()) # >>> 2018-09-05 16:37:11.811998 print(datetime.datetime.today()) # >>> 2018-09-05 16:37:11.811998 # # # 单独获取某个时间 年 月 d = datetime.datetime.now() print(d.year) # >>> 2018 print(d.month) # >>> 9 # # # 将int转或成格式时间 d1 = datetime.datetime(2018, 8, 9, 10) print(d1) # >>> 2018-08-09 10:00:00 # 计算两个时间的差值 只能- 不能+ print(d - d1) # >>>27 days, 6:37:11.811998 # 替换某个时间 print(d.replace(year=2020)) # >>> 2020-09-05 16:37:11.811998 # 表示时间差的模块 timedelta d2 = datetime.timedelta(days=1) d3 = datetime.timedelta(weeks=1) print(d2) # 1 day, 0:00:00 print(d3 - d2) # 6 days, 0:00:00 # timedelta 时间差可以和一个datetime 进行加减 print(d + d3) # 2018-09-12 16:39:23.733509 a = datetime.datetime.now() + datetime.timedelta(days=3) print(a) # 2018-09-08 16:39:23.733509 b = datetime.datetime.fromtimestamp(123123123) # 时间戳转换成字符串日期时间 print(b) # 1973-11-26 08:52:03
random:随机数模块
import random # 0-1随机浮点,不包含1 print(random.random()) # 0.5685792329553742 # a-b 随机整数,包含头尾 print(random.randint(1, 3)) # 3 # a-b 随机整数,不包尾 print(random.randrange(1, 3)) # 2 # 容器随机元素,包头尾 print(random.choice([1, 2, 3])) # 2 # 随机从容器中取值,取X个值,包头尾 print(random.sample([1, 2, 3], 2)) # [3, 2] # 打乱可变容器的元素顺序 l = [1, 2, 3, 4, 5, ] random.shuffle(l) print(l) # [5, 2, 1, 3, 4] # a-b取浮点数,不包头尾 print(random.uniform(1, 2)) # 1.5748282541280614
- random 实例 - 生成随机验证码(随机整形和字符,指定位数)
import random def veri_code(i): res = '' for j in range(i): num = str(random.randint(0, 9)) c = chr(random.randint(65, 90)) s = random.choice([num, c]) res += s return res print(veri_code(4))
sys 模块:python解释器系统相关模块,多用于脚本编写
''' sys python解释器系统相关模块,多用于脚本的编写 1 sys.argv 命令行参数List,第一个元素是程序本身路径 2 sys.exit(n) 退出程序,正常退出时exit(0) 3 sys.version 获取Python解释程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 6 sys.platform 返回操作系统平台名称 '''
- sys模块实例 - 打印进度条
import time # print(("%%-%ds" %(30)) % '*') def progress(percent, width=30): # print(('\r[%% -%ss]'% width)%('*'* int(percent * width)),end='') if percent > 1: percent = 1 str = ('\r[%% -%ss]' % width) % ('*' * int(percent * width)) print(str + '%d%%' % (percent * 100), end='') # progress(0.5) file_size = 1024 get_size = 0 while get_size < file_size: time.sleep(0.5) # 模拟数据的网络延迟 get_size += 100 p = get_size / file_size # print(p) progress(p)
shutil 模块:用于简化文件操作(文件的高级操作)
import shutil # shutil.copyfileobj(fsrc, fdst[, length]) # 将文件内容拷贝到另一个文件中 shutil.copyfileobj(open('old.xml', 'r'), open('new.xml', 'w')) # shutil.copyfile(src, dst) 拷贝文件 shutil.copyfile('f1.log', 'f2.log') # 目标文件无需存在 # shutil.copymode(src,dst) 仅拷贝权限。(内容,组,用户都不变) shutil.copymode('f1.log', 'f2.log') # 目标文件必须存在 # shutil.copystat() 拷贝状态信息 包括:mode bits, atime, mtime, flags shutil.copystat('f1.log', 'f2.log') # 目标文件必须存在 # shutil.copy() 拷贝文件和权限 shutil.copy('f1.log', 'f2.log') # shutil.copy2()拷贝文件和状态信息 shutil.copy2('f1.log', 'f2.log') # shutil.ignore_patterns(*patterns) 无视指定特点的文件 # shutil.copytree(src, dst, symlinks=False, ignore=None) (源文件,目标文件,硬连接,忽略) # 递归的去拷贝文件夹 shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) # 目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) # 通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件 # shutil.rmtree(path) 递归的去删除文件 shutil.rmtree('folder1') # shutil.move(src, dst)递归的去移动文件 同文件夹内的重命名,更改路径 shutil.move('folder1', 'folder3') # shutil.make_archive(base_name, format,...) 创建压缩包并返回文件路径,仅限:zip、tar # /data下的文件打包放置 /tmp/目录 ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')
- shutil 对压缩包的处理 - zipfile压缩、解压缩
# zipfile压缩解压缩 import zipfile # 压缩 z = zipfile.ZipFile('laxi.zip', 'w') # 指定压缩包名,准备写入文件 z.write('a.log') z.write('data.data') # 写入文件 z.close() # 解压 z = zipfile.ZipFile('laxi.zip', 'r') # 指定压缩包名,准备读取文件 z.extractall(path='.') # 指定解压路径为'.',即当前 z.close()
- shutil 对压缩包的处理 - tarfile压缩、解压缩
# tarfile压缩解压缩 import tarfile # 压缩 t = tarfile.open('/tmp/egon.tar', 'w') # 指定压缩包名,准备写入文件 t.add('/test1/a.py', arcname='a.bak') # arcname 指定入包后的名字 t.add('/test1/b.py', arcname='b.bak') # 指定路径写入文件 t.close() # 解压 t = tarfile.open('/tmp/egon.tar', 'r') # 指定压缩包名,准备读取文件 t.extractall('/egon') # 指定解压路径 t.close()
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的相关命令操作 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所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小 os.path.normpath(path) 规范path字符串形式(规范文件路径) '''
- os模块应用-路径处理
#方式一:推荐使用 import os,sys possible_topdir = os.path.normpath(os.path.join( os.path.abspath(__file__), os.pardir, #上一级 os.pardir, os.pardir )) sys.path.insert(0,possible_topdir) #方式二:不推荐使用 path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # 返回项目文件夹