Python基础知识——模块详解一
time模块
>>> import time >>> time.time() 1507105804.214211 >>> time.ctime() 'Wed Oct 4 16:30:11 2017' >>> time.localtime() time.struct_time(tm_year=2017, tm_mon=10, tm_mday=4, tm_hour=16, tm_min=30, tm_sec=17, tm_wday=2, tm_yday=277, tm_isdst=0) >>> time.gmtime() time.struct_time(tm_year=2017, tm_mon=10, tm_mday=4, tm_hour=8, tm_min=30, tm_sec=23, tm_wday=2, tm_yday=277, tm_isdst=0) >>> time.mktime(time.gmtime()) 1507077037.0 >>> time.asctime(time.gmtime()) 'Wed Oct 4 08:30:53 2017' >>> time.strftime('%Y-%m-%d %X', time.localtime()) '2017-10-04 16:31:28' >>> time.strftime('%a %b %d %H:%M:%S %Y', time.gmtime()) 'Wed Oct 04 08:32:41 2017' >>> time.strptime(time.ctime()) time.struct_time(tm_year=2017, tm_mon=10, tm_mday=4, tm_hour=16, tm_min=50, tm_sec=41, tm_wday=2, tm_yday=277, tm_isdst=-1) >>> time.strptime(time.strftime('%Y-%m-%d %X', time.localtime()), '%Y-%m-%d %X') time.struct_time(tm_year=2017, tm_mon=10, tm_mday=4, tm_hour=16, tm_min=53, tm_sec=19, tm_wday=2, tm_yday=277, tm_isdst=-1)
如代码所示,python的time模块中的时间有三种表示形式:
1、时间戳(timestamp):具体来说就是从1970年一月一日零时零分零秒到现在的秒数,实际上返回的是一个浮点型数据,不同系统略有差异,具体时间可通过gmtime(0)得到
2、格式化的时间字符串,如:'Wed Oct 4 16:30:11 2017'
3、struct_time结构体元组,其中有九个元素,按顺序:
tm_year:年数, 包括最高位 tm_mon:月份, 1-12 tm_mday:日期, 1-31 tm_hour:小时数, 0-23 tm_min:分钟数, 0-59 tm_sec:秒数,0-59 tm_wday:每周第几天, 0-6 tm_yday:每年的第多少天, 1-366 tm_isdst:是否是夏令时,该值等于-1时,表示夏令时 这个结构体元组可以由gmtime(), localtime(), strptime()返回 也可以由asctime(), mktime(), strftime()作为参数接收
time方法介绍:
>>> time.strftime('%a %b %d %H:%M:%S %Y', time.localtime(100000)) 'Fri Jan 02 11:46:40 1970' >>> time.strftime('%a %b %d %H:%M:%S %Y', time.gmtime(100000)) 'Fri Jan 02 03:46:40 1970' def a(): time.sleep(5) print(time.clock()) a() print(time.clock()) 运行结果: 4.665234439693681e-07 5.000817815597278
time.time():返回当前时区的时间戳,东八区比零时区要多八个小时
time.mktime(time_struct):根据时间结构体元组,返回时间结构体元组对应的时间戳
time.localtime([timestamp]):如果没有参数,则相当于调用localtime(time.time()), 返回该时间戳对应的时间结构体元组, 参数形式为浮点数的秒数表示的时间戳,则返回参数时间戳对应的时间结构体元组,东八区时间要增加八个小时
time.gmtime([timestamp]):如果没有参数,则返回零时区的当前时间戳对应的时间结构体元组, 参数同localtime(),零时区不增加时间
time.ctime([timestamp]):根据时间戳,返回格式化的时间字符串, 如果没有参数就相当于time.ctime(time.time())
time.asctime([time_struct]):根据时间结构体元组,返回格式化的时间字符串, 如果没有参数,就相当于time.asctime(time.localtime())
time.strftime(format[, time_struct]):将时间结构体元组按照format的格式转换为格式化的时间字符串,如没有时间结构体参数则直接转换localtime
time.strptime(string[, format]):将格式化的时间字符串,按照format格式拆解转换为时间结构体元组,format默认为'%a %b %d %H:%M:%S %Y'
format格式化字符含义:
%Y Year with century as a decimal number. #完整的年份
%m Month as a decimal number [01,12]. #月份, 01-12
%d Day of the month as a decimal number [01,31]. #日期, 01-31
%H Hour (24-hour clock) as a decimal number [00,23]. #小时数, 00-23
%M Minute as a decimal number [00,59]. #分钟数, 00-59
%S Second as a decimal number [00,61]. #秒数, 00-61, 60代表闰秒,61由于历史原因保留
%z Time zone offset from UTC. #当前时区与格林威治时间的偏移小时数
%a Locale's abbreviated weekday name. #简化的周几名称,如Mon-周一
%A Locale's full weekday name. #完整的周几名称
%b Locale's abbreviated month name. #月份简称
%B Locale's full month name. #月份全称
%c Locale's appropriate date and time representation. #本地相应的时间日期表示方式
%I Hour (12-hour clock) as a decimal number [01,12]. #十二小时制的当前小时数
%p Locale's equivalent of either AM or PM. #AM or PM
time.sleep([second]):参数为秒数,是使当前处理器延时的秒数
time.clock():第一次调用返回的时处理器时间,第二次以及以后的多次都是与第一次调用的时间差值

random模块
>>> import random >>> random.random() #生成0-1之间的浮点数 0.18125696566140514 >>> random.randint(1,2) #生成参数范围内的整数,包括两端 1 >>> random.randint(1,2) 2 >>> random.randrange(1,2) #生成参数范围内的整数,[a,b) 1 >>> random.randrange(1,2) 1 >>> random.choice([1,2,3,[1,2,3],{1,2,3}]) #从序列里随机选一个 2 >>> random.choice([1,2,3,[1,2,3],{1,2,3}]) 1 >>> random.choice([1,2,3,[1,2,3],{1,2,3}]) {1, 2, 3} >>> random.choice([1,2,3,[1,2,3],{1,2,3}]) {1, 2, 3} >>> random.sample([1,2,3,[1,2,3],{1,2,3}], 2) #从序列里随机选几个 [1, [1, 2, 3]] >>> random.sample([1,2,3,[1,2,3],{1,2,3}], 2) [2, {1, 2, 3}] >>> random.sample([1,2,3,[1,2,3],{1,2,3}], 2) [2, [1, 2, 3]] >>> random.uniform(1,2) #生成a, b之间的浮点数,当范围非常小的时候或者说当端值出现的几率比较大时,可以包括左侧 1.8366679745425682 >>> random.uniform(10,100) 44.19131638670818 >>> random.uniform(10,100) 63.31778376384927 >>> random.uniform(1, 1.00000000001) 1.0000000000057794 >>> random.uniform(1, 1.00000000000000001) 1.0 >>> a = [1, 2, 3, 4, 5] >>> random.shuffle(a) #随机打乱序列的内容,洗牌 >>> a [4, 5, 3, 2, 1] >>> random.shuffle(a) >>> a [4, 2, 3, 5, 1] >>> random.shuffle(a) >>> a [5, 4, 2, 1, 3]
random模块应用举例:
#随机数生成器、、四位验证码 import random def random_code(): code = '' for i in range(4): add = random.choice([random.randint(0, 9), chr(random.randint(65, 65+25)), chr(random.randint(97, 97+25))]) code = ''.join([str(add), code]) return code # print(random_code()) for i in range(10): print(random_code(), end=' ') 运行结果: fLVD YrlV 0Pu0 QmaY f8lO wN8n NCR4 5rXx 3923 Ne08
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.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
跨平台:
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
路径处理:
os.path.abspath(path) 返回path规范化的绝对路径
os.path.normcase(path) 规范化路径,如..和/, 在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
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.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getsize(path) 返回path的大小
其他:
os.system("bash command") 运行shell命令,直接显示
os.environ 获取系统环境变量
os模块是与操作系统交互的接口, 通常用于处理目录结构,文件路径,环境变量,以及跨平台等系统方面
>>> import os >>> os.curdir '.' >>> os.pardir '..' >>> os.getcwd() 'C:\\Users\\Clingyu\\AppData\\Local\\Programs\\Python\\Python36-32' >>> os.chdir('C:\\Users\\Clingyu\\Desktop') >>> os.getcwd() 'C:\\Users\\Clingyu\\Desktop' >>> os.listdir() [ 'desktop.ini', '优酷.lnk'] >>> os.mkdir('test') >>> os.listdir() ['desktop.ini', 'test', '优酷.lnk'] >>> os.rename('test', 'test1') >>> os.listdir() ['desktop.ini', 'test1', '优酷.lnk'] >>> os.stat('test1') os.stat_result(st_mode=16895, st_ino=3377699720639320, st_dev=508053370, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1507129765, st_mtime=1507129765, st_ctime=1507129765) >>> os.path.getatime('test1') 1507129765.365069 >>> os.path.getatime('test1') 1507129765.365069 >>> os.path.abspath('test1') 'C:\\Users\\Clingyu\\Desktop\\test1' >>> os.path.normcase('C:\\Users\\Clingyu/\..Desktop/test1') 'c:\\users\\clingyu\\\\..desktop\\test1' >>> os.path.split('C:\\Users\\Clingyu\\Desktop\\test1') ('C:\\Users\\Clingyu\\Desktop', 'test1') >>> os.path.dirname('C:\\Users\\Clingyu\\Desktop\\test1') 'C:\\Users\\Clingyu\\Desktop' >>> os.path.basename('C:\\Users\\Clingyu\\Desktop\\test1') 'test1'
os模块应用举例:
import os possible_topdir = os.path.normpath(os.path.join( os.path.abspath(__file__), os.pardir, #上一级 os.pardir, os.pardir )) print(possible_topdir) 运行结果: C:\Users
sys模块
sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxsize 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
>>> import sys >>> sys.stdout.write('please:') please:7 >>> val = sys.stdin.readline()[:-1] Hello world! >>> val 'Hello world!' import sys def sys_test(): print(sys.argv) for i in sys.argv: print(i) sys_test() C:\Users\Clingyu\Desktop>python 1.py ['1.py'] 1.py C:\Users\Clingyu\Desktop>python 1.py a b c ['1.py', 'a', 'b', 'c'] 1.py a b c
sys模块应用举例:
进度条:
sys.stdout:
import sys import time for i in range(100): sys.stdout.write('\r%s' %('#'*i)) sys.stdout.flush() time.sleep(0.5) print: import sys import time for i in range(10): time.sleep(0.5) print('\r%s' %('#'*i),end='',file=sys.stdout,flush=True)
进度条应用:
#=========知识储备========== #指定宽度 print('<%-10.3f>' %3.22) #总宽度为10,保留3位小数点 #打印结果 #<3.220 > #打印%号,用%% width=10 print('<%%-%ds>' %width) #打印结果 # <%-10s> #嵌套的% width=10 print(('<%%-%ds>' %width) %('hello')) #打印结果 # <hello > #=========实现打印进度条函数========== import sys import time def progress(percent,width=50): if percent >= 100: percent=100 show_str=('[%%-%ds]' %width) %(int(width * percent / 100) * "#") #字符串拼接的嵌套使用 print("\r%s %d%%" %(show_str, percent),end='',file=sys.stdout,flush=True) #=========应用========== data_size=3030333 recv_size=0 while recv_size < data_size: time.sleep(0.001) #模拟数据的传输延迟 recv_size+=1024 #每次收1024 recv_per=int(100*(recv_size/data_size)) #接收的比例 progress(recv_per,width=30) #进度条的宽度30

浙公网安备 33010602011771号