模块 :
什么是模块?一个py文件就是一个模块(存在方法等等,变量等等)
模块是可以被其他模块进行引用的
模块中常用的引用方法:
# 第一种导入的方法,导入模块和对应的目录
# import wuhan_20_demo.test
# print(wuhan_20_demo.test.number) # 1000
# wuhan_20_demo.test.work() # hello word
# 第二种导入的方法,导入指定的模块 test
# from wuhan_20_demo import test
# print(test.number) # 1000
# test.work() # hello word
# 第三种 :导入指定的方法
# from wuhan_20_demo.test import work,number
# print(number) # 1000
# work() # hello word
# 第四种 :导入多个模块的方法
# from wuhan_20_demo import test, day_01, day_02
# print(test.number) # 1000
# print(day_01.a) # 武汉
# print(day_02.b) # 多测师
# 第五种 :导入模块当中所有的方法
# from wuhan_20_demo.test import *
# print(number) # 1000
# work() # hello word
模块 : 1.python 内置的模块---->下载python就存在的
re,json,time,os,random,string,copy
2.python 自定义模块 成员自己编写的模块
3.python 第三方模块,其他程序员编写的方法
可以通过下载使用别人所写的模块方法
# import time
# print(time.time()) # 打印1970年到现在所经历的秒数
# print(time.asctime()) # 格式化输出时间
# 用于输出等待
# print("武汉")
# time.sleep(3) # 输出武汉之后过3秒再输出多测师
# print("多测师")
"""
%Y Year with century as a decimal number.
%m Month as a decimal number [01,12].
%d Day of the month as a decimal number [01,31].
%H Hour (24-hour clock) as a decimal number [00,23].
%M Minute as a decimal number [00,59].
%S Second as a decimal number [00,61].
"""
# print(time.strftime("%Y:%m:%d-%H:%M:%S")) # 2022:11:15-09:48:11
copy 模块 :
copy 涉及到深拷贝:
浅拷贝:
# 导入copy模块
import copy
# 浅拷贝赋值
# list1 = ["上海多测师", ["武汉多测师"], "杭州多测师"]
# list2 = copy.copy(list1)
# list1[0] = "深圳多测师" # 修改list第一层的数据
# list1[1][0] = "鼎泰关南大厦"
# id :查看内存地址,在python当中每创建一个数据内容,都会为
# 其分配内存地址
# print(list1)
# print(list2)
# print(id(list1)) # 16193576
# print(id(list2)) # 16191896
# print(id(list1[1])) # 16191776
# print(id(list2[1])) # 16191776
#打印出来的第一个list python重新分配了内存地址,修改数据不会影响当前子集的list数据,共用一个内存地址,
说明是一个东西,所有修改了子集的数据两个列表都会受影响
深拷贝 : deepcopy
# list1 = ["上海多测师", ["武汉多测师"], "杭州多测师"]
# list2 = copy.deepcopy(list1)
# list1[0] = "鼎泰关南大厦"
# list1[1][0] = "维也纳"
# print(id(list1), id(list2)) # 9246800 9245200
# print(id(list1[1]), id(list2[1])) # 9245080 9748648
# print(list1)
# print(list2)
总结:浅拷贝:
使用浅拷贝copy内容,copy完成之后会重新分配内存地址,但是子集
数据还是共用的关系,没有复制到子集数据,所以修改子集数据会
存在影响
深拷贝:
使用深拷贝deepcopy内容,copy完成之后,第一层数据和子集数据都会
重新为其分配内存地址,新数据和原数据之间没有影响
第三方的模块:
1.需要进行下载,file--->setting--->project 项目名称
2.pip 指令下载 : dos指令窗口 执行pip指令下载 : pip install xlrd == 1.2.0
xlrd : 用来读取excel文件的模块,用来操作excel
import xlrd
# 通过open_workbook 打开excel文件
# book = xlrd.open_workbook("D:\PycharmProjects\wuhan20\wuhan_20_demo\data.xls")
# 1.sheet_by_name : 通过sheet 页面名称定位sheet页面
# sheet = book.sheet_by_name("Sheet1")
# print(sheet) # 拿到的是一个定位到的sheet对象
# 2.sheet_by_index : 通过sheet 页面的索引位置定位sheet操作页面
# sheet = book.sheet_by_index(0)
# print(sheet) # 拿到的是一个定位到的sheet对象
# 3.获取excel的所有sheet页面
# sheet = book.sheets()[0]
# print(sheet) # 拿到的是全部的sheet对象,可以通过索引选择对应的sheet页面
# nrows 获取页面内容的行数
# row = sheet.nrows
# print(row)
# 获取行的方法,row_values()
# 1.第一个参数代表行的索引
# 2.第二个参数代表起始列的索引
# 3.第三个参数代表结束列的索引,不会被取到
# value = sheet.row_values(2, 2, 3)
# print(value)
# 获取列的方法 : col_values()
# 1.第一个参数代表列的索引
# 2.第二个参数代表起始行的索引
# 3.第三个参数代表结束行的索引,不会被取到
# value = sheet.col_values(0, 0, 7)
# print(value)
# def excel_getrow(File_Path,SheetName,*index):
# book = xlrd.open_workbook(File_Path)
# sheet = book.sheet_by_name(SheetName)
# new_value = sheet.row_values(*index)
# print(new_value)
# excel_get("D:\PycharmProjects\wuhan20\wuhan_20_demo\data.xls","Sheet1",0,0,7)
# excel_get("data1.xls","Sheet1",2,5,7)
# def excel_getcol(File_Path, SheetName, *index):
# book = xlrd.open_workbook(File_Path)
# sheet = book.sheet_by_name(SheetName)
# new_value = sheet.col_values(*index)
# print(new_value)
#
# excel_getcol("data.xls", "Sheet1", 0, 0, 7)
# excel_getcol("data1.xls", "Sheet2", 0, 5, 7)
# def all_excel(File,Sheetindex):
#
# :param File: 文件的路径
# :param Sheetindex: excel的sheet页面的索引
# :return:返回的是一个存放所有数据的列表
#
# book = xlrd.open_workbook(File)
# sheet = book.sheet_by_index(Sheetindex)
# row = sheet.nrows
# list1 = []
# for i in range(row):
# list1.append(sheet.row_values(i))
# return list1
# print(all_excel("data.xls",0))
random : 也是属于随机函数模块 : 用来生成随机数
import random
# random 方法: 生成0-1之间的浮点数,可以随机为0,但不会为1
# print(random.random())
# randint 方法: 随机生成指定范围的整数,包含结束的值
# print(random.randint(1, 3))
# randrange 方法: 随机生成指定范围的整数,不包含结束的值,具有步长值
# print(random.randrange(1, 11, 2))
# sample 方法: 取序列中的值 : sample 可操作的对象是序列,不包含dict
# li = ["武汉", "上海", "成都", "北京"]
# print(random.sample(li, 2))
# choice : 在序列当中选取一个值
# li = ["武汉", "上海", "成都", "北京"]
# print(random.choice(li))
# shuffle : 打乱顺序
# li = [1, 2, 3, 4, 5]
# random.shuffle(li)
# print(li)
string:
import string
# 生成0-9的数值
# print(string.digits) # 0123456789
# 生成大小写的字母
# print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
# 生成小写字母
# print(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz
# 生成大写字母
# print(string.ascii_uppercase) # ABCDEFGHIJKLMNOPQRSTUVWXYZ
hashlib: md5 加密模块: 只能进行加密不能支持解密
返回一个16进制,且32位的加密文本信息
import hashlib
# md5 = hashlib.md5()
# 填写加密的文本,编码格式
# md5.update("123456".encode("utf-8"))
# 打印加密的密文
# print(md5.hexdigest()) # e10adc3949ba59abbe56e057f20f883e
有一个专门破解md5的网址 一些简单的密文可以处理
# md5.update("武汉多测师".encode("utf-8"))
# print(md5.hexdigest())
os : os模块提供了多平台的功能接口,可以操作访问不同平台的路径
import os
# getcwd : 获取当前执行命令的py文件的所在目录
# print(os.getcwd()) # D:\PycharmProjects\wuhan20\wuhan_20_demo
# isfile() : 判断当前的路径是一个文件,返回的结果是布尔值
# 是文件则为True,不是则为False
# print(os.path.isfile(r"D:\PycharmProjects\wuhan20\wuhan_20_demo\file.txt")) # True
# isdir : 判断当前的路径是一个目录,返回的结果是布尔值
# print(os.path.isdir(r"D:\PycharmProjects\wuhan20\wuhan_20_demo")) # True
# split : 分割: 默认分割尾部的文件目录
# print(os.path.split(r"D:\PycharmProjects\wuhan20\wuhan_20_demo"))
# ('D:\\PycharmProjects\\wuhan20', 'wuhan_20_demo')
# join : 拼接路径
# print(os.path.join("D:/wuhan", "file.txt")) # D:/wuhan\file.txt
# listdir : 打印当前目录下的所有内容,包含隐藏文件和目录信息
# print(os.listdir("D:/")) # 打印d盘下的所有内容
# exists : 判断当前路径是不是存在的
# print(os.path.exists(r"D:\PycharmProjects\wuhan20\wuhan_20_demo")) # True
# dirname : 获取当前路径的上级路径
# print(__file__) # D:\Python37\python.exe D:/PycharmProjects/wuhan20/wuhan_20_demo/day_06.py
# print(os.path.dirname(__file__)) # D:/PycharmProjects/wuhan20/wuhan_20_demo
# print(os.path.dirname(os.path.dirname(__file__))) # D:/PycharmProjects/wuhan20
# mkdir() : 新建一个目录
# os.mkdir(r"D:\PycharmProjects\wuhan20\wuhan_20_demo/duoceshi")
# rename() :修改目录名称
# os.rename(r"D:\PycharmProjects\wuhan20\wuhan_20_demo/duoceshi",
# r"D:\PycharmProjects\wuhan20\wuhan_20_demo/wuhanduoceshi")
# 修改文件名称
# os.rename(r"D:\PycharmProjects\wuhan20\wuhan_20_demo\file.txt",
# r"D:\PycharmProjects\wuhan20\wuhan_20_demo\file1.txt")
异常处理:
什么是异常?
程序运行过程中放出了错误的讯号
常见的异常类型:
# SyntaxError : 出现这个错误代表你编写的代码存在问题
# print("hello word")
# NameError: 当前引用的值没有被定义
# time.time()
# print(name)
# IndexError : 索引值有问题
# li = [1, 2, 3, 4, 5]
# print(li[9])
# IndentationError : 缩进的错误
# name = "张是"
# print(name)
# ValueError : 数据的值有问题
# a = int("abc")
# TypeError : 数据类型存在问题
# a = "1" + 1
# print(a)
异常处理:
异常是指程序运行过程中放出了错误的讯号,一旦程序发生异常,就立即结束了
代码的运行
异常处理就是在程序出现异常的过程中,进行异常处理,让程序正常运行
try:
执行的代码,捕获异常
except:
发现异常执行的代码
else:
没有异常程序执行的代码
finally:
不管程序有没有出现异常,都会执行finally里面的内容
# li = [1, 2, 3, 4, 5]
#
# try:
# print(li[10])
# except Exception as a: # 通过 Exception 处理报错的信息,命名为a
# print(f"error :{a}") # error :list index out of range
#
# finally:
# print("运行成功")
raise: 抛出异常
# x = 10
# if x == 10:
# raise Exception(f"error:x 不能等于 10")
|
|