一、模块
1. 简介
模块化是指将一个程序分解为一个个的模块module,通过组合模块来搭建出一个完整的程序
优点:便于团队开发、方便维护、代码复用
在Python中一个.py文件就是一个模块,创建模块实际上就是创建一个.py文件,可以被其他模块导入并使用
注意:
自定义模块时要注意命名规范,使用小写,不要使用中文、特殊字符等
不要与内置模块冲突
2. 使用模块
导入模块的两种方式:
方式1:import 包名.模块名 [ as 别名]
方式2:from 包名 import 模块名
from 包名.模块名 import 变量|函数|类
导入模块的代码可以放在任意位置,但一般都放在程序的开头
# 方式1
# import py04_模块.mymodule
# print(py04_模块.mymodule.a)# 调用模块中的变量
# print(py04_模块.mymodule.plus(3, 5))
# import py04_模块.mymodule as m
# print(m.plus(3, 5))
# 方式2 # from py04_模块
# import mymodule
# print(mymodule.b)
# print(mymodule.minus(8, 2))
# from py04_模块.mymodule import b, plus, Calculator
# from py04_模块.mymodule import * # 不建议
# print(b)
# print(plus(2, 5))
# print(Calculator.sum(3, 12, 5))
'''
__name__属性是模块的内置属性,每个模块中都有该属性
当该.py文件是主执行文件,直接被执行时,其值为__main__
当该.py文件是被调用,导入执行时,其值为模块名
'''
# print(__name__)
# 程序入门,类似于Java中的main()方法,只在当直接调用该文件时才会执行,用来执行测试
if __name__ == '__main__':
print(Calculator.sum(1, 2, 3))
3. Python标准库
Python提供了一个强大的标准库,内置了许多非常有用的模块,可以直接使用(标准库是随Python一起安 装)
常用的内置模块:
sys:获取Python解析的信息
os:对操作系统进行访问,主要是对目录或文件进行操作
math:数学运算
random:生成随机数
datetime:处理日期和时间,提供了多个类
time:处理时间
import sys
import os
import math
import random
from datetime import datetime, timedelta
import time
print(sys.version) # Python版本
print(sys.platform) # 系统平台
print(sys.argv) # 命令行参数
print(sys.path) # 模块搜索路径,包含了Python解析器查找模块的搜索路径
print(sys.modules) # 显示当前程序中引入的所有模块
print(sys.getdefaultencoding()) # 默认字符集
# sys.exit('程序退出') # 退出解析器
print('')
print(os.name) # 操作系统的类型
print(os.environ['path']) # 系统的环境变量
print(os.getcwd()) # 当前的目录
print(os.listdir('d:/')) # 列出指定目录中的内容
# os.system('ping www.baidu.com') # 执行系统命令
print(os.path.exists('d:/soft')) # 判断路径是否存在
print('')
print(math.pi)
print(math.ceil(3.4))
print(math.floor(3.4))
print(math.pow(2, 3))
print(math.trunc(2.6)) # 截尾取整
print(round(2.6))
print(round(3.1415925, 3)) # 四舍五入,保留三位小数
print('')
print(random.random()) # 返回[0,1)之间的随机浮点数
print(random.randint(1, 101)) # 返回[1,100]之间的随机整数
print(random.sample([1, 21, 54, 23, 6, 2], 2)) # 从数组中返回随机两个元素
print('')
print(datetime.now(), type(datetime.now())) # 返回当前时间
print(datetime.strftime(datetime.now(), '%Y%m%d %H:%M:%S')) # 将datetime转换为指定格式 的str
print(datetime.strftime(datetime.now(), '%Y{0}%m{1}%d{2} %H:%M:%S').format('年', '月', '日'))
print(datetime.strptime('2018214', '%Y%m%d')) # 将str转换为datetime
print('明天:', datetime.now() + timedelta(days=1))
# timedelta表示两个时间之间的时间差,可 以用来进行日间的加减操作
print('前一秒:', datetime.now() timedelta(seconds=1))
print('')
print(time.time()) # 返回当前时间的时间戳
print(int(time.time())) # 秒级时间戳
print(int(time.time() * 1000)) # 毫秒时间戳 time.sleep(5) # 休眠5秒
print(1111)
4. 第三方模块
Python社区提供了大量的第三方模块,使用方式与标准库类似
安装第三方模块:
- 使用包管理工具pip(随Python一起安装的)
pip install 模块名
- 使用PyCharm来安装
Settings——>Project——>Project Interpreter
报错: AttributeError: module ‘pip’ has no attribute ‘main’
解决:找到PyCharm安装目录下的helpers/packaging_tool.py文件,替换其中的do_install和do_uninstall 函数
注:官方仓库比较慢,可以使用豆瓣提供的镜像仓库 https://pypi.douban.com/simple/
pyecharts是一个用于Echarts图表的类库,便于在Python中根据数据生成可视化的图表
Echarts是百度开源的一个数据可视化JS库,主要用来进行数据可视化。
参考:http://pyecharts.org
安装pyecharts库
新版本的pyecharts默认不带地图文件,如果需要使用地图,需要自行安装地图文件包
二、异常处理和IO操作
1. 异常处理
语法:
try:
可能出现异常的代码
except:
出现异常后要执行的操作
else:
不出现异常时执行的操作
finally:
无论是否出现异常都必须要执行的操作
try:
print('try...')
a = 5 / int('abc')
# except: # 捕获所有异常
# except ZeroDivisionError as e: # 捕获ZeroDivisionError异常,获取到异常对象
except (ZeroDivisionError, ValueError, Exception) as e: # 捕获多种异常
print('出现异常啦', e)
else:
print('没有异常时执行')
finally:
print('finally...')
# 自定义异常,继承自Exception(Exception类是所有异常类的父类)
class UsernameExistsException(Exception):
pass
def fn(username):
if username == 'admin' or username == 'tom':
raise UsernameExistsException('用户名已存在') # 使用raise抛出异常
else:
print('ok')
fn(input('请输入用户名:'))
2. IO操作
文件操作
'''
读写模式:
r 读模式
w 写模式(覆盖)
a 追加模式
r+ 读写模式
b 二进制模式
'''
# 读取文件
try:
f = open('itany.txt', mode='r', encoding='utf8') # 打开一个文件,返回一个对象,这个对 象就代表着当前打开的文件
print(f.read()) # 一次性读取所有内容
except FileNotFoundError as e:
print('文件找不到:', e)
finally:
if f:
f.close() # 文件操作后一定要关闭
print('' * 80)
# 简写,使用with...as语句,会自动调用close()
with open('itany.txt', mode='r', encoding='utf8') as f:
# print(f.read())
# print(f.read(3)) # 每次读取3个字符
# print(f.read(3))
# print(f.readline().strip()) # 每次读取一行
# print(f.readline())
lines = f.readlines() # 一次性读取所有行,返回list
# print(lines)
for line in lines:
print(line.strip())
print('' * 80)
# 写文件
with open('itany.txt', mode='a', encoding='utf8') as f:
f.write('xxx\n')
f.write('yyy')
print('' * 80)
# 读写二进制文件
with open('baidu.png', mode='rb') as f:
with open('itany.png', mode='wb') as out:
out.write(f.read())
print('拷贝成功')
文件操作模块
import os
import shutil
# 操作文件和目录
print(os.path.exists('itany.txt')) # 判断是否存在
print(os.path.abspath('itany.txt')) # 文件的绝对路径
print(os.path.isfile('itany.txt')) # 判断是否为文件
print(os.path.isdir('itany.txt')) # 判断是否为目录
print(os.listdir('.')) # 列出指定目录下所有内容
# 找出当前目录下所有的文件夹
dirs = [f for f in os.listdir('.') if os.path.isdir(f)]
print(dirs)
# 创建/删除目录
# os.mkdir('world')
if os.path.exists('world'):
os.rmdir('world')
# 重命名文件或目录
# os.rename('itany.txt', 'aaa.txt')
# 删除文件
# os.remove('aaa.txt')
# 拷贝文件
shutil.copy('baidu.png', 'bbb.png')