一、时间模块 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()) #改变当前脚本工作目录;相当于shell下cd print(os.curdir) #返回当前目录: ('.') os.pardir #获取当前目录的上一个目录:('..') os.makedirs('dirname1/dirname2') #递归创建目录,相当于linux下的 "mkdir -p" os.removedirs('dirname1') #递归的删除目录 os.mkdir('dirname') #在当前目录下创建目录 os.rmdir('dirname') #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir 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 K8.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模块的正常使用方法。