模块简介

一、time模块
二、sys模块
三、datetime模块
四、pickle模块
五、json模块
六、OS模块
七、hashlib加密模块
八、第三方模块的安装方法
九、requests模块
十、XML模块
十一、configparser模块
十二、shutil
十三、subprocess模块
十四、logging模块

 

模块的分类

1、内置模块  

2、自定义模块

3、第三方模块(需要安装)

 

模块前言:模块的导入:

【python之路26】模块  --》 【python之路51】模块补充

【python之路26】模块  --》 【python之路51】模块补充

 

 模块的导入有两点需要注意:

1、在sys.path中的可以直接进行导入,因为sys.path返回的是列表,所以可以利用append把路径加入到列表当中

2、把模块导入后,再次导入模块,python会检测内存中是否存在该模块,如果存在该模块则会忽略导入

一、time模块

1、time.sleep(5)   #等待5秒钟 

#!usr/bin/env python
# -*- coding:utf-8 -*-
import time
print('start to sleep.....')
time.sleep(5)  #等待5秒
print('wake up.....')
#!usr/bin/env python
# -*- coding:utf-8 -*-
import time
print(time.clock())  #返回处理器时间,3.3已经废弃
print(time.process_time()) #返回处理器时间,3.3已经废弃
print(time.time())  #返回时间戳,1970年1月1号0:00至现在一共多少秒,所有系统的时间戳都是从该时间计时的
print(time.ctime(time.time())) #将时间戳转化为字符串,Thu Feb 16 10:10:20 2017
print(time.ctime(time.time()-24*60*60)) #将时间转化为字符串,昨天的这个时间,Thu Feb 15 10:10:20 2017
print(time.gmtime(time.time())) #返回time.struct_time对象,可以分别提取年月日时分秒
print(time.localtime(time.time())) #返回time.struct_time对象,对象显示的是本地时间,可以分别提取年月日时分秒
print(time.mktime(time.localtime(time.time()))) #与localtime功能相反,将time.struct_time对象转化为时间戳

print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))) #将time.struct_time对象转化为字符串格式
print(time.strftime(
'%Y-%m-%d %H:%M:%S') #输出当前时间
print(time.strptime('2017-2-16 11:40:27','%Y-%m-%d %H:%M:%S')) #将字符串转化为time.struct_time对象
#!usr/bin/env python
# -*- coding:utf-8 -*-
#time.gmtime()的用法
#time.localtime()的用法
import time
time_object = time.gmtime(time.time())
print(time_object)
#time.struct_time(tm_year=2017, tm_mon=2, tm_mday=16,
# tm_hour=2, tm_min=35, tm_sec=54, tm_wday=3, tm_yday=47, tm_isdst=0)
time_str = '%s-%s-%s %s:%s:%s' %(time_object.tm_year,time_object.tm_mon,time_object.tm_mday,time_object.tm_hour,time_object.tm_min,time_object.tm_sec)
print(time_str) #2017-2-16 2:45:26  格林威治时间

【python之路26】模块  --》 【python之路51】模块补充

 

 【python之路26】模块  --》 【python之路51】模块补充

【python之路26】模块  --》 【python之路51】模块补充

 二、sys模块

1)sys.argv  ----命令参数List,第一个参数是程序本身路径

import sys
print(sys.argv)
if sys.argv[1] == 'one':
    print('11111')
else:
    print('.....')

在终端中运行结果如下:

E:\python_code\2\11day>python time2.py one
['time2.py', 'one']
11111

2)sys.path    ----返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print(sys.path)
#打印输出:
#['E:\\python_code\\2\\11day', 
# 'E:\\python_code\\2', 
# 'D:\\python_lib',
#  'D:\\Program Files (x86)\\Python36\\python36.zip', 
# 'D:\\Program Files (x86)\\Python36\\DLLs', 
# 'D:\\Program Files (x86)\\Python36\\lib', 
# 'D:\\Program Files (x86)\\Python36', 
# 'D:\\Program Files (x86)\\Python36\\lib\\site-packages']

当导入python包时,会从sys.path路径返回的列表中查找包,找到则运行,并返回。

一般第三方安装的路径都是在:

D:\\Program Files (x86)\\Python36\\lib\\site-packages

3)sys.exit(n)   ----退出程序,正常退出时exit(0)

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
st = input('退出程序:q;输入1打印one;输入2打印two:')
if st == 'q':
    sys.exit('goodbye!')  #也可以用:exit('goodbye!'),退出当前程序
elif st == '1':
    print('one')
elif st == '2':
    print('two')

print('thanks!')

 4)sys.version    ----获取python解释器程序的版本信息

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print(sys.version)
#打印输出:
#3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 08:06:12) [MSC v.1900 64 bit (AMD64)]

5)sys.platform   ----返回操作系统平台名称

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
print(sys.platform)  #打印输出win32

6)sys.stdout.wirte("#")   #在同一行中输出字符串,可以做进度条原理

pip.exe install django   ----从网络下载django并安装,显示安装百分比和进度条

pip uninstall django    ----卸载django

import sys
import time
for i in range(20):
    sys.stdout.write('#')
    time.sleep(0.3)

 在终端中输入上面的代码,可以像进度条一样不断输出#

7)sys.stdin.readline()  #屏幕输入函数

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys
val = sys.stdin.readline()[:-1]  #[:-1]可以用切片截取输入的字符串
print(val) #将输入的内容打印出来,input函数底层实际也调用的这个函数

8) 练习:

读取用户输入的目录,根据用户的输入,创建一个相应的目录

# -*- coding:utf-8 -*-
import sys,os
os.mkdir(sys.argv[1])

自己写一个简单的脚本,可以在任何路径导入

自己做一个带百分比的进度条

#!usr/bin/env python
# -*- coding:utf-8 -*-
import sys,time
for i in range(11):
    sys.stdout.write('\r')  #回车符
    sys.stdout.write('%s%% %s' %(i *10,'#' * i))
    sys.stdout.flush() #从显存刷新到屏幕,没打印一次刷新一次屏幕
    time.sleep(0.2)

三、datetime模块

#时间加减
import datetime

print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
print(datetime.datetime.now() )
print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分,
参数:days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0
  c_time = datetime.datetime.now() print(c_time.replace(minute=3,hour=2)) #时间替换

四、pickle模块 

1、把字典转化为字符串写入文件

#!usr/bin/env python
# -*- coding:utf-8 -*-
accounts = {1000:
                {'name':'sunshuhai',
                 'email':'888@163.com',
                 'password':'888888',
                 'balance':15000,
                 'phone':'13863366666',
                 'bank_num':{'ICBC':'6220216160004852','CBC':'64545455'}
                 },
            1001:
                {'name': 'zhangsan',
                 'email': '777@163.com',
                 'password': '777777',
                 'balance': 12000,
                 'phone': '13863377777',
                 'bank_num': {'ICBC': '62224855', 'CBC': '88045454'}
                 },
}

f = open('ac.txt','w',encoding='utf-8')
text = str(accounts)
print(text)
f.write(text)
f.close()

 但写入文件后,进行无法进行修改,所以可以用pickle模块

2、pickle把字典转为字节类型存入文件

#!usr/bin/env python
# -*- coding:utf-8 -*-
accounts = {1000:
                {'name':'sunshuhai',
                 'email':'888@163.com',
                 'password':'888888',
                 'balance':15000,
                 'phone':'13863366666',
                 'bank_num':{'ICBC':'6220216160004852','CBC':'64545455'}
                 },
            1001:
                {'name': 'zhangsan',
                 'email': '777@163.com',
                 'password': '777777',
                 'balance': 12000,
                 'phone': '13863377777',
                 'bank_num': {'ICBC': '62224855', 'CBC': '88045454'}
                 },
}
import pickle

f = open('ac.txt','wb')
text = pickle.dumps(accounts)  #返回的是(bytes)字节类型,将字典类型转化为字节类型,不管以何种方式打开文件,均返回字节型,所以必须用wb方式打开可以直接写入
f.write(text)  #写入文件
f.close()

 dumps与loads均以字节的形式写入和读取的

#!usr/bin/env python
# -*- coding:utf-8 -*-
import pickle
f = open('ac.txt','rb')
f_read = f.read()  #把pickle写入的字符串还原为字节形式
print(f_read)
dic_text = pickle.loads(f_read) #pickle.dumps存储的字符串转化为字典
print(type(dic_text)) #打印输出:<class 'dict'>

 例子:修改文件中ID为1000的balance的值+500

#!usr/bin/env python
# -*- coding:utf-8 -*-
import pickle
f = open('ac.txt','rb')
text = f.read()  #读取文本内容
dic_text = pickle.loads(text)  #利用pickle将文本内容转化为字典类型
dic_text[1000]['balance'] += 500  #修改字典中的值
f.close()

f = open('ac.txt','wb')
text_write = pickle.dumps(dic_text) #将字典转化为文本内容
f.write(text_write) #把文本内容重新覆盖写入文件
f.close()

f = open('ac.txt','rb')
text_read = f.read() #读取文件中的文本内容
text_dic = pickle.loads(text_read) #利用pickle将文本内容转化为字典
print(type(text_dic),text_dic) #打印字典的类型和字典内容

 3、pickle中的dump和load 与 dumps和loads的区别

dumps可以将字典转为字节,然后以字节方式打开写入文件

dump  可以直接将字典以字节方式打开的文件

loads 可以将字节类型的字符串,直接转化为字典

load可以将以字节方式打开的文件对象直接转化为字典

#!usr/bin/env python
# -*- coding:utf-8 -*-
accounts = {1000:
                {'name':'sunshuhai',
                 'email':'888@163.com',
                 'password':'888888',
                 'balance':15000,
                 'phone':'13863366666',
                 'bank_num':{'ICBC':'6220216160004852','CBC':'64545455'}
                 },
            1001:
                {'name': 'zhangsan',
                 'email': '777@163.com',
                 'password': '777777',
                 'balance': 12000,
                 'phone': '13863377777',
                 'bank_num': {'ICBC': '62224855', 'CBC': '88045454'}
                 },
}
import pickle
f = open('ac.txt','wb')
pickle.dump(accounts,f)  #dump可以直接把字典写入文件
f.close()

f = open('ac.txt','rb')
dic = pickle.load(f)   #load可以直接把文件内容读出为字典类型
print(type(dic),dic)

 五、json模块

json模块与pickle模块用法一致;

区别:

1、pickle模块已字节的方式进行转化,而json是以字符串的方式进行转化。

2、pickle模块可以将任何数据类型序列化,但json不支持某些数据类型的序列化,如data,json只支持字典、列表、简单的变量、字符串等,json不支持元组,稍微复杂的数据类型就不能处理了

3、pickle只在python语言支持,不同语言之间、不同系统之间的接口、数据交互为了通用性,一般选择json。

dumps和loads的用法:

#!usr/bin/env python
# -*- coding:utf-8 -*-
accounts = {1000:
                {'name':'sunshuhai',
                 'email':'888@163.com',
                 'password':'888888',
                 'balance':15000,
                 'phone':'13863366666',
                 'bank_num':{'ICBC':'6220216160004852','CBC':'64545455'}
                 },
            1001:
                {'name': 'zhangsan',
                 'email': '777@163.com',
                 'password': '777777',
                 'balance': 12000,
                 'phone': '13863377777',
                 'bank_num': {'ICBC': '62224855', 'CBC': '88045454'}
                 },
}
import json
f = open('ac.txt','w',encoding='utf-8')
text = json.dumps(accounts) #将字典转化为字符串
f.write(text)  #将转化后的字符串写入文件
f.close()

f = open('ac.txt','r',encoding='utf-8')
text1 = f.read() #读取文件中的字符串
dic = json.loads(text1) #将字符串转化为字典
print(type(dic),dic)
f.close()

dump和load的用法:

#!usr/bin/env python
# -*- coding:utf-8 -*-
accounts = {1000:
                {'name':'sunshuhai',
                 'email':'888@163.com',
                 'password':'888888',
                 'balance':15000,
                 'phone':'13863366666',
                 'bank_num':{'ICBC':'6220216160004852','CBC':'64545455'}
                 },
            1001:
                {'name': 'zhangsan',
                 'email': '777@163.com',
                 'password': '777777',
                 'balance': 12000,
                 'phone': '13863377777',
                 'bank_num': {'ICBC': '62224855', 'CBC': '88045454'}
                 },
}
import json
#dump和load
f = open('ac.txt','w',encoding='utf-8')
json.dump(accounts,f)  #直接将accounts转化为文本,写入f对象
f.close()

f = open('ac.txt','r',encoding='utf-8')
dic = json.load(f)  #直接读取f对象中的文件,并转化为字典
print(type(dic),dic)

注意:python代码中列表、字典等内部尽量的字符串使用双号,如果将含有单引号的字符串传给json,则会报错,所以以后列表、字典等内部的字符串尽量使用双引号loads时使用双引号表示字符串,dumps可以使用单引号表示字符串,例如: 

#!usr/bin/env python
# -*- coding:utf-8 -*-
import json
st = '{"name":"sunshuhai","age":100}'
#如果st = "{'name':'sunshuhai','age':100}"则会报错
st_dic = json.loads(st)
print(type(st_dic),st_dic)

json不支持元组

tup = (11,22,33)
import json
r2 = json.dumps(tup)
print(r2)   #打印输出[11, 22, 33]


s = '("11","22","33")'
import json
r1 = json.loads(s)
print(r1) #会报错,因为json不支持元组,只支持列表和字典

 

 

六、OS模块

 1 os.getcwd()                 获取当前工作目录,即当前python脚本工作的目录路径
 2 os.chdir("dirname")         改变当前脚本工作目录;相当于shell下cd
 3 os.curdir                   返回当前目录: ('.')
 4 os.pardir                   获取当前目录的父目录字符串名:('..')
 5 os.makedirs('dir1/dir2')    可生成多层递归目录
 6 os.removedirs('dirname1')   若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
 7 os.mkdir('dirname')         生成单级目录;相当于shell中mkdir dirname
 8 os.rmdir('dirname')         删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
 9 os.listdir('dirname')       列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
10 os.remove()                 删除一个文件
11 os.rename("oldname","new")  重命名文件/目录
12 os.stat('path/filename')    获取文件/目录信息
13 os.sep                      操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
14 os.linesep                  当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
15 os.pathsep                  用于分割文件路径的字符串
16 os.name                     字符串指示当前使用平台。win->'nt'; Linux->'posix'
17 os.system("bash command")   运行shell命令,直接显示
  os.popen("dir")        运行shell命令,返回结果
18 os.environ 获取系统环境变量 19 os.path.abspath(path) 返回path规范化的绝对路径 20 os.path.split(path) 将path分割成目录和文件名二元组返回 21 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 22 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 23 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False 24 os.path.isabs(path) 如果path是绝对路径,返回True 25 os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False 26 os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False 27 os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 29 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)
注意:os.stat('path/filename') 获取文件/目录信息 的结构说明

相关文章: