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

 

posted @ 2018-03-07 09:19  Clingyu  阅读(123)  评论(0)    收藏  举报