1、模块简介
模块化指将一个完整的程序分解成一个个的小模块
通过将模块组合,来搭建出一个完整的程序
模块化的优点
①方便开发
②方便维护
③模块可以复用
2、模块的创建
在Python当中一个py文件就是一个模块
在一个模块中引入外部模块 import 模块名(模块名就是py文件)
可以引入同一个模块多次,但是模块的实例只会创建一次
import 模块名 as 模块别名
在一个模块内部都有一个__name__。通过它我们可以获取模块的名字
如果py文件直接运行时,那么__name__默认等于字符串’main’。__name__属性值为__main__的模块是主模块。一个程序中只有一个主模块
if __name__ == '__main__':#在当前模块下调用,其他模块可以引用但是不执行
pass
3、模块的使用
访问模块中的变量 语法是 模块名.变量名
访问模块中的函数 语法是 模块名.函数名
访问模块中的对象 语法是 模块名.对象名
我们也可以引入模块中部分内容 语法 from 模块名 import 变量,变量…
还有一种引入方式 语法 from 模块名 import 变量 as 别名
4、常见内置模块的使用
4.1 sys模块
import sys
print(sys.version)#3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)]
print(sys.argv) # list 第一个元素 当前文件绝对路径
print(sys.argv[0])
print(sys.path)
4.2 os模块
import os
# print(os.getcwd())# 返回当前工作的目录
# print(os.chdir('c:'))# 改变当前路径到一个指定的目录下
# print(os.getcwd())
# os.mkdir('discount')#在当前目录下创建一个想要创建的文件夹,当文件已存在时,则无法创建该文件
# os.makedirs("moon\\sun") # 递归创建多个文件夹
# os.removedirs("moon\\sun") # 递归删除多个文件夹 注意 空
# os.mkdir("moon\\sun") # 只能创建单个文件夹
# os.rmdir("sun") # 只能删除单个文件夹
# print(os.path.exists('discount'))#判断文件是否村子啊,返回一个布尔值
# if not os.path.exists('discount//hh'):# 常用作文件夹的创建
# os.mkdir('discount//hh')
# j_path = os.path.join('ss','op')
# print(j_path)#拼接路径
# print(type(os.getcwd()))#<class 'str'>
4.3 time模块
import time
# print('1'*20)
# time.sleep(2.2)# 可以为浮点数,延迟执行时间
# print('1'*20)
# print(time.time()) #1596500816.191587 秒时间戳,1970年至今总共的秒数,常用做taken加密毫秒时间戳
# print(time.localtime(time.time()))# 将秒转化为元组
# print(time.localtime())# 不传默认为本地当前时间
'''2020-8-4
time.strftime()--->时间格式化:将tuple转化为str,不能拼接中文
'''
# print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
import datetime #基于time模块的封装
# print(datetime.datetime.now())#直接获取当前时间
'''计算七天前的时间日期'''
print(datetime.datetime.now()-datetime.timedelta(days=7)) # 2020-07-28 08:41:04.664192
print(datetime.datetime.now().date()) # 2020-07-28
print(datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S'))# Jan-15-2021 11:09:38
4.4 random随机模块
import random
# print(random.random()) # 生成0-1的随机数[0,1)
# print(random.random()*10) # 生成[0,10)
# print(random.randint(1,10)) # 生成随机的整数 左右闭合[1,10]
# li = list('12345')
# print(random.choice(li)) #随机生成字符串(在序列中取元素)
# li = [1,2,3,4,5,6]
# li = (1,2,3,4,5,6) #元组不可以,不可变
# li = {1,2,3,4,5,6} #集合不可以,没有索引
# random.shuffle(li) # 直接打印就为None,只能洗list洗牌的意思
# print(li) #[4, 3, 6, 5, 1, 2]
# print(random.randrange(1,10,2))# 随机数左闭右开,和range相同
'''
1.使用随机数实现简单的验证码 6位数 全都为数字
'''
# def v_code():
# code = ''
# # li = [res for i in range(6)]
# for i in range(6):
# add_num = random.randint(0,9)
# code += str(add_num)
# print(code)
# v_code()
'''
2.使用随机数字与字母实现简单的验证码
'''
# def v_code():
# code = ''
# for i in range(3):
# li_range = [1,2,3,4,5,6,7,8,9,'A','B','C','D','E']
# add_num = random.sample(li_range,2)#随机取指定个数的元素-->返回的是一个列表
# add_num = list(map(str,add_num))
# code += ''.join(add_num)
# print(code)
# v_code()
'''
字母能否用数字来表示?--->ascill 表
ord ('A')---> 65 字符转ascii
chr (65) --> 'A' ascii转字符
'''
def v_code():
code = ''
for i in range(6):
num = random.randrange(10)#[0,9)
chara = chr(random.randrange(65,91)) #[A,Z]
li = [num,chara]
add_num = random.choice(li)
code += str(add_num)
print(code)
v_code()
4.5 json模块
JSON 是一种使用广泛的轻量级数据格式,python标准库中的json模块提供了Json数据的处理功能
由于json与python当中的字典格式非常像,所以python’中的json模块与相当于是用来使json与字典做转换,要注意json中的数据必须使用双引号包裹,严格要求
json模块常用的方法
json.dumps以及json.loads
'''
将字典转化为字符串
1.str强转
'''
# data = {"age":18}
# print(data)#{'age': 18}
# print(type(str))
# res = str(data)
# print(res)#{'age': 18}
# print(type(res))#<class 'str'>
import json
# data = {"age":18}
# print(type(data))#<class 'dict'>
# res = json.dumps(data)#dums (s-->str)将字典转为字符串
# print(type(res),res)#<class 'str'> {"age": 18}
'''要获得18'''
j_data = '{"age":18}'
res = json.loads(j_data)# 将字符串转化为字典通过key值就可以得到自己想要的数据
print(res['age'])
4.6csv的读写操作
csv是一种文件的格式,在该类型的文件中一般会保存多个数据信息的内容,但是每一个数据信息一定都有各自组成的部分(开发者定义),用这样的文件进行数据采集内容的记录
在i般的数据采集系统之中,往往会有两个不痛的系统架构:数据采集系统、数据分析系统,数据分析完成之后才会交给其他程序进行使用。或者公开一些数据的访问接口供他用户使用
流式离线
4.6.1列表操作对象,写入读取操作
import csv
import os
FILE_PATH = 'D:'+ os.sep +'order.csv'
HEADERS = ['用户','省份','城市','总额','数据']
def main():
with open(FILE_PATH,'w',newline='',encoding='utf-8')as file:
csv_file = csv.writer(file)
csv_file.writerow(HEADERS)
for num in range(20):
csv_file.writerow(['%d'%num,'陕西','安康','%d'%(num*99),'%d'%(num*1)])
if __name__ == '__main__':
main()
'''一行一行的创建读取对象'''
FILE_PATH = 'D:'+ os.sep +'order.csv'
HEADERS = ['用户','省份','城市','总额','数据']
def main():
with open(FILE_PATH,mode='r',newline='',encoding='utf-8')as file:
csv_file = csv.reader(file)
header_row = next(csv_file)
print(header_row)
rows = [row for row in csv_file]
print(rows) # 全部读取,如果文件过大可能会导致内存溢出
# for row in csv_file:#所以采取一行一行的读取,读一行,处理一行
# print(row)
if __name__ == '__main__':
main()
4.6.2字典操作对象,写入读取操作
import csv
import os
FILE_PATH = 'D:'+ os.sep +'order.csv'
HEADERS = ['用户','省份','城市','总额','数据']
def main():# 字典的key就是标题的名称
orders_rows = [{'用户':'a','省份':'shanxi','城市':'ankang','总额':'522','数据':'252'}
,{'用户':'b','省份':'shanxi','城市':'ankang','总额':'522','数据':'252'},
{'用户':'c','省份':'shanxi','城市':'ankang','总额':'522','数据':'252'}]
with open(FILE_PATH,'w',newline='',encoding='utf-8')as file:
csv_file = csv.DictWriter(file,HEADERS)#设置标题未写入
csv_file.writeheader()#写入标题
csv_file.writerows(orders_rows)
if __name__ == '__main__':
main()
'''字典的读取'''
FILE_PATH = 'D:'+ os.sep +'order.csv'
HEADERS = ['用户','省份','城市','总额','数据']
def main():# 字典的key就是标题的名称
with open(FILE_PATH,'r',newline='',encoding='utf-8')as file:
csv_file = csv.DictReader(file)
for row in csv_file:
print(row.get('用户'),row.get('省份'))
if __name__ == '__main__':
main()