一:模块的基本认识:
- 内置模块
- 内置模块是python自带的功能,在使用内置模块相应功能时,需要先导入再使用
- 第三方模块
- 下载-->安装-->使用
1.找到Python所在的根目录-->再找到Scripts目录-->最后找到pip.exe 2.把pip.exe所在的目录添加到环境变量中 3.pip install 要安装的模块名称 #pip install xlrd #安装完成后,如果导入不成功 - 重启PyCharm - 安装错了
- 下载-->安装-->使用
- 自定义模块
- 自己写一个模块(一个py文件) : aaa.py
def f1(): prinrt('f1') def f2(): print('f2')
- 自己写一个模块(一个py文件) : aaa.py
-
- 在另一个py文件中调用模块中的功能 :a1.py
#调自定义模块中的功能 import aaa aaa.f1() aaa.f2()
- 运行
a1.py
- 在另一个py文件中调用模块中的功能 :a1.py
二:模块的调用
1.示例一:
# xxx.py
def show():
print('nihao')
def func():
pass
print(111)
#导入模块,加载此模块中的所有值到内存(一)
import xxx
print(222)
##调用模块中的函数
xxx.func()
#导入模块(二)
from xxx import func,show
from xxx import func
from xxx import *
func()
#导入模块(三)
from xxx import func as f #起别名
def func():
print(222)
f()
2.示例二:
xxxxxx #(某个文件夹)
-jd.py #里面有个f1函数
-tb.py
-pdd.py
import xxxxxx.jd
jd.f1()
from xxxxxx import jd
jd.f1()
from xxxxxx.jd import f1
f1()
3.总结
模快和要执行的py文件在同一目录且需要模块中的很多功能时,推荐使用:import 模块
-
其他推荐:from 模块 inport 模块 模块.函数()
- 其他推荐:from 模块.模块 import 函数()
三:内置模块及其使用方法
-
.random
#获取6个Unicode对应表中十进制相对应的数据
import random def get_random_code(length = 6): data = [] for i in range(length): v = random.randint(65,90) data.append(chr(v)) return ''.join(data) code = get_random_code() print(code)import random # 导入一个模块 v = random.randint(起始,终止) #得到一个随机数
-
.hashlib :用于加密相关的操作,代替了md5模块和sha模块
- 将指定的'字符串'进行加密
import hashlib def get_md5(num): obj = hashlib.md5() obj.update(data.encode(utf-8)) result = obj.hexdigest() return result val = get_md5('某段数字') print(val)
- 加盐 : (让密码更加安全)
import hashlib def get_md5(data): # md5括号内的内容越长,越不容易被破解 obj = hashlib.md5("sidrsicxwersdfsaersdfsdfresdy54436jgfdsjdxff123ad".encode('utf-8')) obj.update(data.encode('utf-8')) result = obj.hexdigest() return result val = get_md5('123') print(val)
- sys : python解释器相关的数据
- sys.getrefcount : 获取一个值的应用计数
import sys #导入模块 a = [1,2,3] b = a print(sys.getrefcount(a)) #结果为:3 相当于a被使用了三次
- sys.getrecursionlimit : python中默认支持的递归数量
import sys print(sys.getrecursionlimit()) # 结果为 :1000
- sys.argv : 命令行参数,第一个元素是程序本身路径
#写一个脚本,接收两个参数。
- 第一个参数:文件
- 第二个参数:内容
#请将第二个参数中的内容写入到 文件(第一个参数)中
import sys if len(sys.argv) < 3: print('参数不够,请重新运行') else: file_path = sys.argv[1] content = sys.argv[2] with open(file_path,mode='w',encoding='utf-8') as f: f.write(content)
- sys.path : 默认python去导入模块时,会按照sys.path中的路径挨个查找
import sys sys.path.append('D:\\') import oldboy
- sys.getrefcount : 获取一个值的应用计数
- os : 和操作系统相关的数据
- os.path.exists(path) , 如果path存在,返回True;如果path不存在,返回False
-
os.stat('某个文件').st_size : 获取文件大小
-
os.path.abspath() : 获取一个文件的绝对路径
path = '某个需要查看路径的文件' import os v1 = os.path.abspath(path) print(v1) # 这个文件所在的全部目录
- os.path.dirname : 获取路径的上级目录
import os v = r"C:\python36\新建文件夹\python36.exe D:/第三周/day14.py" print(os.path.dirname(v)) #C:\python36\新建文件夹\python36.exe D:/第三周 一级一级往上走
- os.path.join : 路径的拼接
import os path = "C:\python36\新建文件夹\python36.exe" v = 'n.txt' result = os.path.join(path,v) print(result) #C:\python36\新建文件夹\python36.exe \n.txt result = os.path.join(path,'n1','n2','n3') print(result) #C:\python36\新建文件夹\python36.exe \n1\n2\n3
- os.listdir :查看一个目录下所有的文件(第一层)
import os result = os.listdir(r'D:\untitled') for i in result: print(i)
- os.walk : 查看一个目录下所有的文件(所有层)
import os result = os.walk(r'D:\untitled') for a,b,c in result: # a,正在查看的目录 b,此目录下的文件夹 c,此目录下的文件 for item in c: path = os.path.join(a,item) print(path)
-
os.makedirs 创建目录和子目录
-
- os.rename 重命名
import os os.rename('某个文件的名字','想要修改后的名字')
- os.stat 读取文件大小
import os #1.读取文件大小(字节) file_size = os.stat('某个文件').st_size #2. 一点一点读取文件 read_size = 0 with open('某个文件',mode='rb') as f1,open('将要写入的文件',mode='wb') as f2: while read_size < file_size: chunk = f1.read(1024) #每次最多去读取1024字节 f2.write(chunk) read_size += len(chunk) val = int(read_size / file_size * 100) #查看打印进度 print('%s%%\r' %val ,end='')
- os.rename 重命名
-
JSON&pickle
-
json : 一个特殊的字符串 [长得像列表/字典/字符串/数字/真假]
-
优点:所有语言通用;缺点:只能序列化基本的数据类型
-
json.dumps 序列化
-
json.loads 反序列化
-
- pickle:优点:python中所有的东西都能被他序列化 缺点:序列化的内容只有python认识
import json #序列化:将python的值转换为json格式的字符串 v = [11,22,{'k1':'v1'},True,'ggg'] v1 = json.dumps(v) print(v1) #"[11, 22, {"k1": "v1"}, true, "ggg"]" #反序列化 : 将json格式的字符串转换成python的数据类型 v2 = '["alex",123]' print(type(v2)) #字符串类型 v3 = json.loads(v2) print(v3,type(v3)) #['alex', 123] <class 'list'>
- 字典或列表中如有中文,序列化时想要保留中文显示
v = {'k1':'alex','k2':'李杰'} import json val = json.dumps(v,ensure_ascii=False) print(val)
-
-
-
注意:
-
json 最外层必须是容器类的,如列表/字典,元组会被转换为列表.
-
里面的内容可以是:str int bool list tuple 集合不能存在于json中
-
字串必须使用双引号(" ")连接
-
-
-
shutil
-
删除目录
import shutil shutil.rmtree('要删除的目录')
- 重命名
import shutil shutil.move('原目录','修改后的目录')
- 压缩文件 shutil.make_arcHive
import shutil shutil.make_archive('要压缩的文件','文件的后缀名(如zip)','要压缩到的路径')
- 解压文件 shutil.unpack_archive
import shutil shutil.unpack_archive('要解压的文件',extract_dir=r'D:\code\xxxxxx\xxxx',fORMat='zip')
-
-
time&datetime
-
UTG/GMT 世界时间
-
本地时间 本地时区的时间
-
time :
-
time.time() 时间戳(获取当前时间) 从1970-1-1 00:00 后走过的秒数
-
time.sleep(8) 等待的秒数
-
- 获取datetime格式时间
import time from datetime import datetime,timezone,timedelta v1 = datetime.now() # 获取当前本地时间 print(v1) # 2019-04-18 16:39:31.802269 tz = timezone(timedelta(hours=7)) #当前东7区时间 (如要获取西7区时间 hours=-7) v2 = datetime.now(tz) print(v2) #2019-04-18 15:39:31.802269+07:00 (中国在东8区,所以慢一个小时) v3 = datetime.utcnow() #当前UTC时间(世界时间) print(v3) #2019-04-18 08:39:31.802269 (比中国时间慢8个小时)
- 把datetime格式转换成字符串 (strftime)
import time from datetime import datetime,timezone,timedelta v1 = datetime.now() val = v1.strftime("%Y-%m-%d %H:%M:%S") #(年-月-日 时:分:秒) print(val) #2019-04-18 16:48:29
- 字符串转成datetime格式 datetime.strptime
import time from datetime import datetime,timezone,timedelta v1 = datetime.strptime('2019-4-18','%Y-%m-%d') print(v1,type(v1)) # 2019-04-18 00:00:00 <class 'datetime.datetime'>
- datetime时间的加减
import time from datetime import datetime,timezone,timedelta v1 = datetime.strptime('2008-08-08','%Y-%m-d') v2 = v1-timedelta(days=150) #括号里的内容可以是:(year+或- month+或-) data = v2.strftime('%Y-%m-%d') print(data) #2008-03-11 #先转换为datetime格式进行加减,然后转换为字符串格式打印出来
- 时间戳和datetime的关系
import time from datetime import datetime,timezone,timedelta ctime = time.time() print(ctime) # 1555578896.8276453 v1 = datetime.fromtimestamp(ctime) print(v1) # 2019-04-18 17:14:56.827645 v1 = datetime.now() val = v1.timestamp() print(val) #1555579030.002739
-
四:异常处理
#固定搭配
try:
except Exception as e:
#写函数去,接受一个列表。列表中都是url,请访问每个地址并获取结果。
import requests
def func(url_list):
result = []
try:
for url in url_list:
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result #['Http://www.baidu.com'] (中国无法访问谷歌)
def func2(url_list):
result = []
for url in url_list:
try:
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result #['http://www.baidu.com','http://www.bing.com']
func(['http://www.baidu.com','http://www.Google.com','http://www.bing.com'])