Pyrhon 模块使用

一、时间模块 time

 1.1、初识时间模块,时间的三种格式(重点)

import time

#第一种时间格式:
print(time.time())
>>1527000352.3488626 linux 元年时间到当前时间,一共有多少秒

#第二种时间格式:
print(time.strftime("%Y-%m-%d %X"))
>>:格式化的时间字符串:'2018-05-22 22:47:41'
# %Y:年,%m:月,%d:日,%X:当前时间(::)的格式,%X==%H:%M:%S

#第三种时间格式:struct_time(结构化时间)
print(time.localtime()) #时间对象(把一个完整的时间拆分成一个个小的部分,方便单独取值)
>>time.struct_time(tm_year=2018, tm_mon=5, tm_mday=22, tm_hour=22, tm_min=52, tm_sec=26, tm_wday=1, tm_yday=142, tm_isdst=0)
print(time.localtime().tm_year)    #取时间对象内的参数(tm_year)得到对应的值()
>>2018
print(time.localtime().tm_mon)     #取时间对象内的参数(tm_mon)得到对应的值()
>>5
print(time.localtime().tm_mday)    #取时间对象内的参数(tm_mday)得到对应的值()
>>22
print(time.localtime().tm_hour)    #取时间对象内的参数(tm_hour)得到对应的值(时象)
>>23

print(time.gmtime())    #GMT时区(世界标准时间)的时间对象
>>time.struct_time(tm_year=2018, tm_mon=5, tm_mday=22, tm_hour=15, tm_min=0, tm_sec=29, tm_wday=1, tm_yday=142, tm_isdst=0)
#time.localtime()是一样的,只不过它取得时间为GMT时区的时间


 1.2、时间之间的转换关系(了解)



import time
# 一、时间戳转换成结构化时间
print(time.localtime(123123))
>>time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=18, tm_min=12, tm_sec=3, tm_wday=4, tm_yday=2, tm_isdst=0)

print(time.gmtime(123123))
>>time.struct_time(tm_year=1970, tm_mon=1, tm_mday=2, tm_hour=10, tm_min=12, tm_sec=3, tm_wday=4, tm_yday=2, tm_isdst=0)

# 二、结构化时间转换成时间戳
print(time.mktime(time.localtime()))
>>1527002000.0

#三、结构化的时间转换成字符串的形式
print(time.strftime('%Y-%m-%d',time.localtime()))
>>2018-05-22

#四、把格式化的字符串时间转换成结构化时间
print(time.strptime('2017-05-22','%Y-%m-%d'))
>>time.struct_time(tm_year=2017, tm_mon=5, tm_mday=22, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=142, tm_isdst=-1)

#五、其他格式时间
time.sleep(3)    #等待3秒在执行

print(time.asctime(time.localtime()))   #linux服务器时间格式(转换本地时间)
>>Tue May 22 23:27:21 2018

print(time.ctime(123123))     #时间戳形式
>>Fri Jan  2 18:12:03 1970

二、时间模块 datatime

2.1、datatime使用

import datetime
print(datetime.datetime.now())   #打印当前时间
# >>2018-05-22 23:33:57.233285

print(datetime.datetime.now().replace(year=1999,hour=3))  #把当前时间的""替换成了1999,"小时"替换成了3
# >>1999-05-23 03:08:38.648744

print(datetime.datetime.fromtimestamp(123123))   #打印时间戳
# >>1970-01-02 18:12:03

print(datetime.datetime.now() + datetime.timedelta(days=3))   #打印三天后的当前时间
# >>2018-05-26 00:04:05.001374
print(datetime.datetime.now() + datetime.timedelta(days=-3))   #打印三天前的当前时间

print(datetime.datetime.now() + datetime.timedelta(weeks=3))   #打印三周后的当前时间
# >>2018-06-13 00:04:45.468382
print(datetime.datetime.now() + datetime.timedelta(weeks=-3))   #打印三周前的当前时间
# >>2018-05-02 00:05:37.230676

三、随机模块random

    3.1、随机模块random重点掌握

import random
print(random.randint(1,3))  #随机取1~3任意一个为整数的值
>>3

print(random.choice([1,'a',2,'b']))   #随机取列表中的某1个值
>>2


    3.2、随机模块random了解知识点

import random
print(random.random())      #取一个随机数
>>0.4627305393531762

print(random.sample([1,'a',2,'b'],2))   #随机取列表中的某2个值
>>['b', 'a']

print(random.uniform(1,3))   #1~3之间随机的小数
>>2.597815832594728

l=[1,3,4,5,6]
random.shuffle(l)      #打乱列表l里面值得顺序
print(l)
>>[4, 6, 5, 1, 3]

四、os模块

import os
print(os.getcwd())         #获取当前工作目录,即当前python脚本工作的目录路径,相当于Linux下的"pwd"
print(os.chdir())          #改变当前脚本工作目录;相当于shellcd
print(os.curdir)           #返回当前目录: ('.')
os.pardir                  #获取当前目录的上一个目录:('..')
os.makedirs('dirname1/dirname2')    #递归创建目录,相当于linux下的 "mkdir -p"
os.removedirs('dirname1')    #递归的删除目录
os.mkdir('dirname')          #在当前目录下创建目录
os.rmdir('dirname')          #删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname
os.listdir('.')              #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
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.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的大小


    4.1、os模块几个要记住的用法

    1.打印当前目录下所有的文件

import os
print(os.listdir(r'.'))   #打印当前目录下的所有文件
>>['test.txt', 'test.xml', 'test.xml.swap', '第七节课.py']

    2.使用os.system可以执行系统命令

import os
os.system('ipconfig')    #使用os.system执行系统命令,把执行命令后的结果输出到屏幕

res=os.system('ipconfig')  #把命令执行的结果赋值给res,类似linux下的"echo "$?" "
print(res)
# >>0       #返回"0"表示命令执行成功
# >>1       #返回"1"表示命令执行失败

    使用os.system执行系统命令,把执行命令后的结果输出到屏幕,虽然可以通过赋值操作给一个变量值,但是只能拿到'0'和'1',而不能拿到执行命令后的结果,这里可以通过(suprocess模块)实现。


    3、打印当前文件的绝对路径

import os
res=os.path.join(
    os.path.abspath(__file__),   #获取当前文件名
    '..',                        #获取上一级目录".."
    '..'                         #获取上一级目录".."
)
print(os.path.normpath(res))     #使用os.path.normpath,得到当前文件的绝路径(根路径)
>>C:\Users\stsud\Desktop\Pycharm文档

五、sys模块

import sys

print(sys.argv)
>>['C:/Users/stsud/Desktop/Pycharm文档/第七次课/第七节课.py']

sys.exit(0)   #退出程序,正常退出时exit(0)

print(sys.version)   #查看Python解释器的版本信息
>>3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]

print(sys.path)     #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
>>['C:\\Users\\stsud\\Desktop\\Pycharm文档\\第七次课', 'C:\\Users\\stsud\\Desktop\\Pycharm文档', 'C:\\Install Path\\Python3.6\\python36.zip', 'C:\\Install Path\\Python3.6\\DLLs', 'C:\\Install Path\\Python3.6\\lib', 'C:\\Install Path\\Python3.6', 'C:\\Install Path\\Python3.6\\lib\\site-packages', 'C:\\Install Path\\Python3.6\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 'C:\\Install Path\\Pycharm-破解版\\PyCharm 2018.1\\helpers\\pycharm_matplotlib_backend']

print(sys.platform)   #返回操作系统平台名称
>>win32

    5.1、利用sys模块打印进度条:基础进阶

#进度条功能:手动面条版
import sys,time
print('\r[#####]',end='')             #"\r"表示每次打印的内容都从第一行开始(相当于第二次打印的内容会覆盖掉第一次打印的内容)
time.sleep(1)
print('\r[######]',end='')             #"\r"表示每次打印的内容都从第一行开始(相当于第二次打印的内容会覆盖掉第一次打印的内容)
time.sleep(1)
print('\r[#######]',end='')             #"\r"表示每次打印的内容都从第一行开始(相当于第二次打印的内容会覆盖掉第一次打印的内容)
time.sleep(1)
print('\r[############]',end='')       #end='' 表示把每一行的换行符替换为空
[######]


#进度条功能:手动面条版-升级
import sys,time
print('[%-50s]'  %'#')       #"%-50s"其中"-50"表示左对齐,宽度为50%s还是用来传值的
print('[%-50s]'  %'##')
print('[%-50s]'  %(int(0.3*50)*'#'))   #(int(0.3*50)*'#'),数字与字符相乘==(15*'#')
print('[%-50s]'  %(int(1*50)*'#'))     #(int(1*50)*'#'),数字与字符相乘==(50*'#')
[#                                                 ]
[##                                                ]
[###############                                   ]
[##################################################]

print('%d%%' %30)    #2%%表示取消%的特殊意义,就只是一个普通的字符"%"
>>30%

print(('[%%-%ss]'  %50) %'#######')  #('[%%-%ss]'  %50)给传一个值50进去后就会得到[%-50s]
>>[%-50s]

#进度条功能:综合升级版
import sys,time
def jindutiao(precent,width=50):
    print(('\r[%%-%ss]' %width) %(int(precent * width) * '#'),end='')

total_size=102400              #下载总量
resv_size=0                    #接受量为0
while resv_size < total_size:  #接受量小于下载总量时
    time.sleep(0.1)
    resv_size+=1024            #每次下载1024
    precent=resv_size / total_size   #已下载量除以下载总量得到一个百分比
    jindutiao(precent)                  #把得到的百分比传到函数jindutiao里面

    5.2、利用sys模块打印进度条:完整功能

#进度条功能:综合完整版
import sys,time
def jindutiao(precent,width=50):       #主体函数
    if precent>1:                #如果百分比大于100%时,把它固定死,不能超过100%
        precent=1
    show_str=('[%%-%ss]' %width) %(int(precent * width) * '#')
    print('\r%s %d%%' %(show_str,int(precent * 100)),end='')

#################################上面为主体函数-可套用################################

#测试进度条功能
total_size=102400                #下载总量
resv_size=0                      #接受量为0
while resv_size < total_size:    #接受量小于下载总量时
    time.sleep(0.1)
    resv_size+=1024              #每次下载1024
    precent=resv_size / total_size        #已下载量除以下载总量得到一个百分比
    jindutiao(precent)                    #把得到的百分比传到函数jindutiao里面

六、shutil模块

    6.1、将文件内容拷贝到另一个文件中

import shutil
shutil.copyfileobj(open('test.txt','r'), open('new.txt', 'w'))
    原理:将test.txt以"r"只读的模式读出文件内容,然后以"w"写的模式把读出的文件内容写到新的new.txt文件中。

    6.2、拷贝文件

import shutil
shutil.copyfile('new.txt', 'new2.txt')      #目标文件无需存在

    6.3、仅拷贝权限。内容、组、用户均不变

import shutil
shutil.copymode('f1.log', 'f2.log')         #目标文件必须存在

    6.4、仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

import shutil
shutil.copystat('f1.log', 'f2.log')         #目标文件必须存在
    6.5、拷贝文件和权限
import shutil
shutil.copy('f1.log', 'f2.log')
    6.6、拷贝文件和状态信息
import shutil
shutil.copy2('f1.log', 'f2.log')
    6.7、递归的去拷贝文件夹
import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除 

    6.8、递归的去移动文件,它类似mv命令,其实就是重命名。

import shutil
shutil.move('folder1', 'folder3')


    6.9、shutil.make_archive 打包文件

import shutil
ret = shutil.make_archive("test_bak", 'gztar', root_dir=r'C:\Users\stsud\Desktop\Pycharm文档\第七次课')
# test_bak 打包后命名为"test_bak.tar.gz"
# gztar tar的方式打包文件
# root_dir 被打包的文件

    6.10、tarfile 解压文件

import tarfile
f=tarfile.open('test_bak.tar.gz','r')
f.extractall(r'C:\Users\stsud\Desktop\Pycharm文档\第八节课')
f.close()

# tarfile.open('test_bak.tar.gz','r') 'r'只读模式打开test_bak.tar.gz文件
# f.extractall(r'C:\Users\stsud\Desktop\Pycharm文档\第八节课') 文件解压后存放的目录
# f.close() 文件打开后需要被关闭

   shutil 对压缩包的处理是调用 zipfile tarfile 两个模块来进行的,详细:


    6.10.1、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()

zipfile压缩解压缩

七、shevle 模块 只支持Python格式的数据类型

    7.1、存文件

import shelve

f=shelve.open(r'shelve.txt')         #打开一个文件并写入内容,并存在磁盘里面
f['a']={'age':18,'sex':'male'}
f['b']={'age':38,'sex':'famale'}
f.close()

    7.2、取文件内容

import shelve
f=shelve.open(r'shelve.txt')         #打开一个文件并写入内容,并存在磁盘里面
f['a']={'age':18,'sex':'male'}
f['b']={'age':38,'sex':'famale'}

print(f['a'])    #取出'a'的所有值
>>{'age': 18, 'sex': 'male'}
print(f['b'])
>>{'age': 38, 'sex': 'famale'}

print(f['b']['age'])   #取出'a'里面的'age'的值
>>38
print(f['b']['sex'])
>>famale

f.close()

    7.3、修改文件内容

import shelve
f=shelve.open(r'shelve.txt',writeback='True')    #要加writeback='True',表示写回
f['a']={'age':18,'sex':'male'}
f['b']={'age':38,'sex':'famale'}

f['a']['age']=19          #修改文件内内容'age'19
print(f['a']['age'])
>>19
f.close()


八、suprocess 模块  可执行系统命令的模块(cmd命令)

    8.1、执行正确的命令之后的返回值给管道,通过stdout=subprocess.PIPE获取

import subprocess
obj=subprocess.Popen(       
    'ipconfig',             # 'ipconfig' 要执行的命令
    shell=True,             # shell=True 需要调用命令解释器来帮我执行'tasklist'这个命令
    stdout=subprocess.PIPE, # stdout=subprocess.PIPE 即管道(命令执行后结构给到管道),stdout表示输入正确的命令得到的返回值
    stderr=subprocess.PIPE, # stderr=subprocess.PIPE # stderr表示输入错误的命令得到的返回值
)

stdout=obj.stdout.read()
print(stdout.decode('gbk'))    #不加字符集得到的是二进制形式的返回值,这里要使用操作系统所使用的字符集('gbk')

>>: 映像名称                       PID 会话名              会话#       内存使用
>>: ========================= ======== ================ =========== ============
>>: System Idle Process              0 Services                   0          8 K
>>: System                           4 Services                   0         24 K
>>: Registry                       120 Services                   0     13,280 K
    8.2、输入错误的命令之后的返回值给管道,通过stderr=subprocess.PIPE获取

import subprocess
obj=subprocess.Popen(
    'taskliasdasdst',       # 'taskliasdasdst' 要执行的命令
    shell=True,             # shell=True 需要调用命令解释器来帮我执行'tasklist'这个命令
    stdout=subprocess.PIPE, # stdout=subprocess.PIPE 即管道(命令执行后结构给到管道),stdout表示输入正确的命令得到的返回值
    stderr=subprocess.PIPE, # stderr=subprocess.PIPE # stderr表示输入错误的命令得到的返回值
)

stderr=obj.stderr.read()
print(stderr.decode('gbk'))

>>: 'taskliasdasdst' 不是内部或外部命令,也不是可运行的程序
>>: 或批处理文件。
    8.3、suprocess(子进程),在程序运行中,会先运行主进程,主进程可以生产一个子进程,在主进程运行的同时子进程也在运行(相当于并发执行,可提高效率,节省时间)

import subprocess
obj=subprocess.Popen(              #执行命令的过程
    'tasklist',
    shell=True,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
)
stdout=obj.stdout.read()        #拿到执行命令得到的结果
print(stdout.decode('gbk'))

    #以上为suprocess模块的正常使用方法。













猜你喜欢

转载自blog.csdn.net/sinat_29214327/article/details/80413321