四大模块
7.15内容整理和概述
今日内容概要
内容目录
- 模块之datetime
- 模块之os
- 模块之sys
- 模块之json
模块之datetime
模块功能:与time模块相似,时间操作相关
方法:
1.datetime.datetime.today():
功能:显示当前时间,精确到秒
相关方法:
1.datetime.datetime.today().year:显示当前年份
2.datetime.datetime.today().mouth:显示当前月份
3.datetime.datetime.today().weekday():显示当前周几(计算机算法)
4.datetime.datetime.today().isoweekday():显示当前周几(人类算法)
5.datetime.datetime.now():当前时区时间
6.datetime.datetime.utcnow():零时区时间
7.datetime.datetime(2017, 5, 23, 12, 20):自己指定时间
2.datetime.date.today():
功能:显示当前年月日
3.datetime.timedelta():
参数:days,seconds,microsecounds,minutes,hours,weeks
功能:设置一个时间区域
模块之os
"""主要和操作系统打交道"""
方法:
1.os.mkdir():在指定路径创建单极目录,不能创建多级目录
2.os.makedirs():在指定路径创建多级目录
"""创建文件夹的两种方法都可以用绝对路径和相对路径"""
3.os.rmdir():在指定路径删除单极空目录
4.os.removedirs():在指定路径删除所有的空目录
"""删除文件夹的两种方法都可以用绝对路径和相对路径"""
5.os.listdir():列举指定路径下所有的文件名称,并以列表输出;空白则默认当前执行文件所在的目录
6.os.rename(需要改的文件路径,被改后改的文件路径):重命名文件,可以通过前后路径的不同进行改名和转移文件
7.os.remove(被移除的文件路径):删除文件
8.os.getcwd():获取当前"工作"路径
9.os.chdir():进入指定路径
10.os.path.abspath(__file__):获取当前"文件"的绝对路径
11. os.path.dirname(__file__): 获取当前"文件所在目录"的绝对路径
12.os.path.exists():判断输入的路径中是否存在文件或者目录
13.os.path.isdir():判断输入的路径中是否存在该目录
14.os.path.isfile():判断输入的路径中是否存在该文件
15.os.path.join(前部分路径,后部分路径):拼接路径
"""join方法可以自动识别当前所在的操作系统并自动切换正确的分隔符,不建议用+符号拼接路径"""
16.os.path.getsize():获取文件大小,以字节数为单位
模块之sys
"""主要和python解释器打交道"""
方法:
1.sys.path:获取环境变量,以列表形式输出
2.sys.version:查看解释器信息
3.sys.platform:查看当前平台
4.sys.argv:在终端运行,可以获输入,形成一个列表
模块之json
json模块又名序列化模块
json格式的数据属于字符串
功能:能实现不同编程语言之间的数据交互
特征:
1.数据为字符串
2.有标志性的双引号
方法:
1.json.dumps():序列化,将输入的数据类型转换成json格式
2.json.loads():反序列化, 将json格式字符串转换成对应编程语言中的数据类型
3.json.dump(数据, 文件):只用于文件操作,将数据转换为json格式并写入指定文件
4.json.load(文件):将文件中json格式字符串读取出来并转换成对应的数据类型
今日作业
第一题:
编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
import os
import sys
count = 0
input_order = sys.argv
file_fun = input_order[1]
file_path = input_order[2]
order_list = os.listdir(file_path)
print(order_list)
for i in order_list:
if file_fun in i:
count += 1
print(f"{file_fun}的类型有{count}个")
第二题:
针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
import json
relative_path = "story/user.txt"
absolute_path = os.path.dirname(__file__)
order_path = os.path.join(absolute_path,relative_path)
while True:
order = input("请输入注册和登录:")
if order == "2":
username = input("请输入用户名:")
password = input("请输入密码:")
dict = {}
dict[username] = password
with open(order_path,"a",encoding="utf8") as user:
json.dump(dict, user)
user.write('\n')
if order == "1":
with open(order_path,"r",encoding="utf8") as user:
for i in user:
print(json.loads(i.strip("\n")))
第三题:
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
import os
relative_path = "study/db"
absolute_path = os.path.dirname(__file__)
order_path = os.path.join(absolute_path,relative_path)
dict_file = {}
count = 1
os.makedirs(order_path)
os.chdir(order_path)
with open("J老师学习资料.txt","a",encoding="utf8") as f:
f.write("J老师学习资料")
with open("R老师学习资料.txt","a",encoding="utf8") as f:
f.write("R老师学习资料")
with open("C老师学习资料.txt","a",encoding="utf8") as f:
f.write("c老师学习资料")
with open("B老师学习资料.txt","a",encoding="utf8") as f:
f.write("B老师学习资料")
file_list = os.listdir()
print("请选择你需要学习的资料:")
print("退出程序请输入 “0")
for i in file_list:
dict_file[count] = i
print(f"{count}.{dict_file[count]}")
count += 1
while True:
order_number = input("请输入学习资料编号:")
if order_number == "0":
print("欢迎下次再来")
break
elif order_number in ["1","2","3","4"]:
file_path = dict_file[int(order_number)]
with open(file_path,"r",encoding="utf8") as f:
print(f.read())
else:
print("请输入正确的编号")
continue
os.remove(r'J老师学习资料.txt')
os.remove(r'R老师学习资料.txt')
os.remove(r'C老师学习资料.txt')
os.remove(r'B老师学习资料.txt')
os.chdir(absolute_path)
os.removedirs(order_path)
第四题:
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
数据格式 {"name":"jason","pwd":123}
ps:文件名可以直接用用户名便于校验
用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
{"balance":15000,"shop_car":{}}
添加购物车功能 商品列表可以自定义或者采用下列格式
good_list = [
['挂壁面',3]
['印度飞饼', 22]
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]
]
用户可以反复添加商品,在购物车中记录数量
{'极品木瓜':[个数,单价]}
结算购物车
获取用户购物车中所有的商品计算总价并结算即可
针对添加购物车和结算只有登录的用户才可以执行
# 注册
def register():
register_username = input("请输入用户名:")
register_password = input("请输入密码:")
register_client_list = os.listdir(client_storage_path)
if not os.path.isfile(os.path.join(client_storage_path, register_username)):
# if not (register_username in register_client_list):
client_dict = {
"username": register_username,
"password": register_password,
"balance": 15000,
"shop_car": {}
}
with open(os.path.join(client_storage_path, register_username), "w", encoding="utf8") as f:
json.dump(client_dict, f)
print("注册成功")
else:
print("用户名已存在")
# 登录
def login():
login_username = input("请输入用户名:")
login_password = input("请输入密码:")
login_client_list = os.listdir(client_storage_path)
# if os.path.isfile(os.path.join(client_storage_path, login_username)):
if login_username in login_client_list:
with open(os.path.join(client_storage_path, login_username), "r", encoding="utf8") as f:
login_client = json.load(f)
username = login_client.get("username")
password = login_client.get("password")
if login_username == username and login_password == password:
global online_client
online_client = login_client
print("登录成功")
else:
print("请输入正确的用户名或密码")
else:
print("请输入正确的用户名或密码")
# 添加商品
def add_goods():
if online_client:
print("""
这是今日商品:
1.挂壁面 ————3元
2.印度飞饼 ————22元
3.极品木瓜 ———666元
4.土耳其土豆 ———999元
5.伊拉克拌面 ———1000元
6.董卓戏张飞公仔 ———2000元
7.仿真玩偶 ———10000元
""")
goods_inder = input("请选择你需要的商品编号:")
if goods_inder in ([str(i) for i in range(1,8)]):
goods_name = good_list[int(goods_inder)-1][0]
goods_price = good_list[int(goods_inder)-1][1]
client_goods_item = online_client.get("shop_car")
if not (goods_name in client_goods_item):
client_goods_item[goods_name] = [1,goods_price]
with open(os.path.join(client_storage_path, online_client.get("username")), "w", encoding="utf8") as f:
json.dump(online_client,f)
print("商品添加成功")
print(online_client)
else:
client_goods_item[goods_name][0] += 1
with open(os.path.join(client_storage_path, online_client.get("username")), "w", encoding="utf8") as f:
json.dump(online_client,f)
print("商品添加成功")
print(online_client)
else:
print("请输入正确的商品编码")
else:
print("请先登录")
# 结算商品
def settle_goods():
if online_client:
global count
count = 0
client_goods_item = online_client.get("shop_car")
for i in client_goods_item.values():
count += i[0]*i[1]
if count <= online_client["balance"]:
print(f"总共花费{count}元")
online_client["balance"] -= count
online_client["shop_car"] = {}
with open(os.path.join(client_storage_path, online_client.get("username")), "w", encoding="utf8") as f:
json.dump(online_client, f)
else:
print("余额不足")
else:
print("请先登录")
# 用户退出
def quit_client():
global online_client
online_client = {}
print("用户已退出")
# 主函数
import os
import json
good_list = [
['挂壁面', 3],
['印度飞饼', 22],
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]
]
online_client = {}
absolute_path = os.path.dirname(__file__)
client_storage_path = os.path.join(absolute_path, "db")
try:
os.makedirs(client_storage_path)
except Exception as e:
pass
print("""
欢迎来到本系统:
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
5.退出登录
0.退出系统
""")
while True:
func_order = input("请输入功能序号:")
if func_order == "1":
register()
elif func_order == "2":
login()
elif func_order == "3":
add_goods()
elif func_order == "4":
settle_goods()
elif func_order == "5":
quit_client()
elif func_order == "0":
break
else:
print("请输入正确的功能序号")

浙公网安备 33010602011771号